2012-03-20 51 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 

我想在订单的嵌套形式显示与文本框所有的奖旁边用户可以在其中输入件(如量订购)。当提交表单时,创建操作应相应地创建order_lines。我无法在任何地方找到解决方案。

回答

0

首先在Order模型中使用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 2012-03-20 11:24:58

+0

代码正常运行,但可能不会显示任何内容,因为订单没有任何奖励。如果您想在订单表单中编辑和实例化奖品,您应该在控制器中添加@ order.prizes.build。查看[此链接](http://railscasts.com/episodes/196-nested-model-form-part-1)以获取更多信息 – shuriu 2012-03-20 12:18:55

+0

如果我执行@ order.prizes.build,我所得到的只有一个空奖实例在块中。链接到RailsCasts只适用于我有一对多关联。这里情况不同 :-( – jriff 2012-03-20 12:26:00