2013-04-28 3 views
0

У меня есть две модели, ингредиенты и продуктов питания:Как параметры передаются для вложенных атрибутов в Rails?

class Food < ActiveRecord::Base 

    belongs_to :user 
    has_many :ingredients 

    accepts_nested_attributes_for :ingredients 

    attr_accessible :name, :price 
end 

class Ingredient < ActiveRecord::Base 

    belongs_to :user 
    belongs_to :food 

    attr_accessible :ingredient_name, :quantity_used 
end 

Схемы для двух моделей заключаются в следующем:

create_table "foods", :force => true do |t| 
    t.string "name" 
    t.integer "user_id" 
    t.float "price" 
    t.string "ingredient_name" 
    end 

    create_table "ingredients", :force => true do |t| 
    t.string "ingredient_name" 
    t.integer "user_id" 
    t.integer "food_id" 
    t.integer "quantity_used" 
    end 

Я создаю форму для продуктов питания, который также создает/обновляет Ингредиент таблицу также. У меня есть форма, и кнопка отправки обновляет правильные атрибуты, но у меня есть другие атрибуты в каждой таблице, которые я хочу обновить. Например, в контроллере питания я хочу сделать что-то вроде ingredient.user_id = current_user.id. Я понимаю, что я могу получить доступ к файлам через параметры [: food], но как мне получить доступ к отдельным полям, которые не обновляются в форме?

Прямо сейчас, моя форма:

<%= form_for(@food) do |f| %> 
    <div class="field"> 
    <%= f.label :Name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :price %><br /> 
    <%= f.number_field :price %> 
    </div> 
    <div> 
     <%= f.fields_for :ingredients do |builder| %> 
     <%= builder.label "Ingredient Used:" %> 
     <%= builder.text_field :ingredient_name %><br /> 
      <%= builder.label "Quantity Used:" %> 
      <%= builder.text_field :quantity_used %><br /> 
     <% end %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Как получить доступ к этим конкретным пищевым ингредиентам в Продовольственном # создает действие?

Спасибо!

+0

Как и в предыдущем вопросе - http://stackoverflow.com/questions/16073617/how-to-access-nested-parameters-in-rails. Кроме того, взгляните на [документацию] (http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html) – kiddorails

+0

Ответ там для меня не работал. Оглядываясь назад, у меня была опечатка, и теперь она работает. Благодарю. –

ответ

2

Вам может понадобиться добавить : ingredients_attributes к attr_accessible в вашей модели еды.

Вы можете общаться с хэшем params в контроллере, итерации по : components_attributes или вы можете использовать assign_attributes.

Смежные вопросы