2012-03-20 65 views
0

我试图在我的产品展示视图中通过连接模型为我的Producttracklisting has_many嵌套表单。什么是正确的方法来做到这一点?我为各种失败的尝试收到各种错误。 的型号如下:为连接模型嵌套表单的正确方法?

class Product < ActiveRecord::Base 
    has_many :producttracklistings 
    has_many :tracks, :through => :producttracklistings 
end 

class Track < ActiveRecord::Base 
    has_many :producttracklistings 
    has_many :products, :through => :producttracklistings 
end 

class Producttracklisting < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :track 
end 

的形式如下:

<%= form_for(@producttracklisting) do |f| %> 
    <%= f.label :track_id %> 
    <%= f.text_field :track_id %> 
    <%= f.label :product_id %> 
    <%= f.text_field :product_id %> 
    <%= f.submit %> 
<% end %> 

我试图把这个转化为产品/节目使用:

<%= render 'producttracklistings/form' %> 

与所有上面我得到一个“未定义的方法`model_name'为NilClass:类”

在此先感谢。

回答

3

您要找的是accepts_nested_attributesfields_for的组合。 有关详细教程,请参阅RailsCast Part 1part 2

PS: 我建议命名您的模型ProductTrackListing,结果产生一个名为product_track_listings的表。这是更可读性和“铁路方式”

+0

非常感谢! – Raoot 2012-03-20 11:16:57

+0

其实,我不确定这就是我所追求的,我想我可能会误用'嵌套'这个词。我所要做的就是将Producttracklisting表单带到产品展示视图上,以便我可以将轨道关联到该产品。我基本上计划运行一个循环来显示每个曲目的'添加到产品'按钮。这完全符合产品轨道/新视图。 – Raoot 2012-03-20 11:41:00

+0

啊...我明白了。好的,以及错误“未定义的方法'model_name'为NilClass:Class”意味着它无法通过form_for调用中的给定变量解析模型名称(ergo @producttracklisting未设置)。因此,要使用相同的表单,您必须在您的控制器中设置此变量,即使用“@producttracklisting = @ product.producttracklistings.build”左右...... – Vapire 2012-03-20 11:45:09