bạn có thể giải quyết bằng cách tùy thuộc vào thực tế là số mức cho phép có thể có nhiều hơn mức bạn thực sự cần, vì vậy bạn có thể đếm sự xuất hiện của các đệ quy chính nodes
quan trọng trong việc bạn sử dụng băm và số này là số lượng các cấp.
Lưu ý rằng số lượng này sẽ được nhiều hơn mức bạn thực sự cần, nhưng nó đơn giản hơn đệ quy đếm số lượng cấp trong băm
Vì vậy, trong điều khiển của bạn, bạn có thể như sau:
# 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)
Và có mã xây dựng thông số mạnh thực tế có thể giống như sau
# 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
Nguồn
2016-04-28 14:54:15
Bạn đã bao giờ tìm ra điều này chưa? – senfo