0

Вот мои Титулы:Rails позволяют вложенные параметры хэш

{"utf8"=>"✓", "authenticity_token"=>"g0mNoBytyd0m4oBGjeG3274gkE5kyE3aPbsgtqz3Nk4=", "commit"=>"Save changes", "plan_date"=>{"24"=>{"recipe_id"=>"12"}, "25"=>{"recipe_id"=>"3"}, "26"=>{"recipe_id"=>"9"}}} 

Как я разрешаю:

"plan_date"=>{"24"=>{"recipe_id"=>"12"}, "25"=>{"recipe_id"=>"3"}, "26"=>{"recipe_id"=>"9"}} 

Чтобы получить вывод, который выглядит следующим образом:

permitted_params = ["24"=>{"recipe_id"=>"12"}, "25"=>{"recipe_id"=>"3"}, "26"=>{"recipe_id"=>"9"}] 

, так что я могут использовать следующие, чтобы сэкономить:

permitted_params.each do |id, attributes| 
    Object.find_by_id(id.to_i) 
    Object.update_attributes(attributes) 
end 

Я пытаюсь следующий, но это не работает:

def permitted_params 
    params.require(:plan_date).permit(:id => [:recipe_id]) 
end 

Моя версия на самом деле, не давая ничего пройти через = (

+0

Я отвечал на подобный вопрос - надеюсь, что это помогает http://stackoverflow.com/questions/30894070/rails-4-permit-any-keys-in-the-hash/31033036#31033036. –

ответ

0

хэшей с целыми ключами трактуются по-разному и вы можете объявить атрибуты, как если бы они были прямыми потомками

RailsGuides - Action Controller Overview

def permitted_params 
    params.require(:plan_date).permit([:recipe_id]) 
end 

Хотя «Rails Way» должен использовать fields_for.

<%= form_for :plan_date do |f| %> 
    <%= f.fields_for :recipes do |ff| %> 
    <%= ff.text_field :foo %> 
    <% end %> 
<% end %> 

Это дает вложенную атрибуты хэш:

plan_date: { 
    recipes_attributes: [ 
    "0" => { foo: 'bar' } 
    ] 
} 

который может быть использован с accepts_nested_attributes_for для создания и обновления вложенных моделей.

def update 
    @plan_date.update(permitted_params) 
end 

def permitted_params 
    params.permit(:plan_date).permit(recipies_attributes: [:foo]) 
end