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