2016-03-19 16 views
0

Ben bir ilişkilendirmeye nesneler topluluğu güncellemek amaçlayan bir form var: parametrelerBeyaz liste parametreleri

<%= form_tag(url: update_parent_children_path(parent_id: @parent.id), method: :put) do %> 
    <% @children.each do |child| %> 

    <%= fields_for "children[]", child do |cf| %> 

    .... Fields for form 

, bu genelinde gelir gibi:

params[:children] --> 
    {"1" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"}, 
    "2" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"}, 
    "3" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"}} 

Nesnenin bir örneğini beyaz listeye almak için biliyorum, kullanıyorum:

params.require(:child).permit(:foo, :bar, :baz) 

Benzer bir yöntem var mı? Çocuk paramları tam listesini izin?

Başvuru için

kod güncelleme bloğu kullanıyorum olacak:

update_params beyaz listede bulunan çocuklardır
def update_children_on_parent 
    @children.each do |child| 
    child_params = update_params.select{|key, value| key == child.id} 
    child.update(child_params) 
    end 
end 

listesine güncelleme fonksiyonunda

+0

'params.require (: ana) .permit (: çocuk => {: ece: bar} 'iç içe geçmiş paramları geçmenize izin vermeli, ayrıca' accepts_nested_attributes_for' – toddmetheny

cevap

0

parametreleri, birlikte müsaade params bireysel ziyade önceden tanımlanmış olarak daha beyaz liste. aşağıdaki gibi

params[:children] --> 
{ 
    "1" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"}, 
    "2" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"}, 
    "3" =>{"foo"=>"x", "bar"=>"y", "baz"=>"z"} 
}, 

güncelleştirme işlevi göz önüne alındığında,

çalışır: ana kontrol birimi,

@children.each do |child| 
    child_params = params[:children].select{|key, value| key == child.id.to_s}["#{child.id}"] 
    child.update(child_params.permit(:foo, :bar, :baz)) 
...