2012-03-20 2 views
0

У меня есть эти модели:.fields_for и has_many_through

class Order < ActiveRecord::Base 
    has_many :order_lines 
    has_many :prizes, :through => :order_lines 
    accepts_nested_attributes_for :order_lines 
end 

class Prize < ActiveRecord::Base 
    has_many :order_lines 
end 

class OrderLine < ActiveRecord::Base 
    belongs_to :order 
    belongs_to :prize 
end 

Я хотел вложенную форму в форме заказа, который отображает каждый приз в текстовом поле рядом с ним, где пользователь может ввести части (например, количество заказать). Когда форма отправляется, действие create должно соответствующим образом создавать order_lines. Я не могу найти решение нигде.

ответ

0

Прежде всего в модели заказа используйте accepts_nested_attributes_for :prizes, а не то, что у вас есть.

После того, что это легко, просто добавить форму в представлении (нет дополнительного контроллера шага)

<%= form_for @order do |order_form| %> 
    .. 
    <%= order_form.fields_for :prizes do |prizes_form| %> 
    <%= prizes_form.text_field :piece %> 
    .. 
    <% end %> 
.. 
<% end %> 

Это прямо из документации ... You should definitely check that first.

+0

Спасибо за ваш ответ. При этом fields_for не перебирает призы. Код в блоке не запускается вообще. – jriff

+0

Код работает нормально, но он, вероятно, ничего не показывает, потому что у ордера нет никакого приза. Если вы хотите отредактировать и создать экземпляр приза в форме заказа, вы должны добавить @ order.prizes.build в контроллер. Проверьте [эту ссылку] (http://railscasts.com/episodes/196-nested-model-form-part-1) для получения дополнительной информации – shuriu

+0

Если я делаю заказ @ order.prizes.build, я получаю только один пустой приз экземпляр в блоке. Ссылка на RailsCasts применяется только в том случае, если у меня есть ассоциация «один ко многим». Здесь не так :-( – jriff