Sie durch in Abhängigkeit von der Tatsache lösen kann, dass Anzahl der erlaubten Niveau als das Niveau, das Auftreten des rekursiven Schlüssel nodes
Schlüssel zählen können Sie tatsächlich benötigen, so dass Sie in Ihrem Hash und Verwendung mehr sein kann dies zählt als Anzahl der Ebenen.
Beachten Sie, dass diese Zählung wird mehr sein als die Ebenen, die Sie wirklich brauchen, aber es ist einfacher, als rekursiv Anzahl der Ebenen in der
Hash zählen
So in Ihrem Controller können Sie die folgenden Schritte aus:
# your_controller.rb
# include RecursiveParametersBuilder
recursive_nodes_attr = build_recursive_params(
recursive_key: 'nodes',
parameters: params,
permitted_attributes: [:name]
)
params.require(:model_name).permit(:name, nodes: recursive_nodes_attr)
Und haben die tatsächlichen starken Parameter Bau-Code wie folgt sein kann
# helper module
module RecursiveParametersBuilder
# recursive_path = [:post]
# recursive_key = :comment_attributes
# recursive_node_permitted_params = [:id, :_destroy, :parameterized_type, :parameterized_id, :name, :value, :is_encrypted, :base_param_id, :parent_param_id]
#
def build_recursive_params(recursive_key:, parameters:, permitted_attributes:)
template = { recursive_key => permitted_attributes }
nested_permit_list = template.deep_dup
current_node = nested_permit_list[recursive_key]
nested_count = parameters.to_s.scan(/#{recursive_key}/).count
(1..nested_count).each do |i|
new_element = template.deep_dup
current_node << new_element
current_node = new_element[recursive_key]
end
nested_permit_list
end
end
Haben Sie jemals herausgefunden, diese? – senfo