2013-07-17 161 views
0

上額外的屬性我有一個已經和屬於許多product_linksHABTM嵌套形式

class Product < ActiveRecord::Base 

has_many :map_product_prices 
has_many :product_links, :through => :map_product_prices 
accepts_nested_attributes_for :product_links 

和......一個產品

class ProductLink < ActiveRecord::Base 

has_many :map_product_prices 
has_many :products, :through => :map_product_prices 
accepts_nested_attributes_for :products 

我使用Ryan Bates的nested_form「寶石本。這是我無法環繞我的大腦的問題。地圖表也有附加的價格屬性。

class MapProductPrice < ActiveRecord::Base 

attr_accessible :product_link_id, :product_id, :price 

belongs_to :product 
belongs_to :product_link 

我有一個多選框,可以在產品鏈接表單上選擇一個或多個產品。但那是當我切換到瑞恩寶石使用嵌套窗體,以便我可以有一個選擇框來選擇產品,然後輸入價格的文本字段。然後我可以根據需要添加/刪除它們。

這裏是我有我的觀點:

<%= f.fields_for :products do |product| %> 
     <%= product.select :product_id, options_for_select(select_options) %> 
     <%= product.text_field :price %> 
     <%= product.link_to_remove "Remove this product" %> 
    <% end %> 
    <p><%= f.link_to_add "Add a product", :products %></p> 

人對如何最好地做到這一點任何想法?

我從這種形式得到的是,沒有產品的product_id屬性。這是有道理的,因爲product_id位於映射表上,而不是產品。那麼我怎樣才能在這個嵌套表單中引用映射表而不是產品呢?我不想添加新產品,我希望能夠在現有產品中添加新映射,並在每個映射旁邊添加價格。

感謝

編輯: 我已經編輯我的代碼,以反映具有通過我試過很多。當我查看視圖時,它告訴我產品生成器對象上沒有product_id或price屬性。如何將此設計轉化爲表單並使其工作?謝謝

回答

0

您需要從HABTM切換到has_many :through關係。 HABTM表只能有兩個外鍵字段,一個has_many :through連接模型有一個主鍵,並且您可以根據需要添加任意數量的字段以加入連接模型。

的Rails指南:here

當你想使用你的加入模型has_many : through關係一個很好的例子是像添加練習鍛鍊:

class Workout < ActiveRecord::Base 

    has_many :workout_exercises, 
    has_many :exercises, :through => :workout_exercises 

class WorkoutExercise < ActiveRecord::Base 

    belongs_to :exercise 
    belongs_to :workout 

class Exercise < ActiveRecord::Base 

    has_many :workout_exercises 
    has_many :workouts, :through => :workout_exercises 

所以現在練習在體育鍛煉中可以有體重,或者只需向連接表添加權重字段就可以與體重相關聯。

+0

謝謝,我實際上嘗試過這一點,當涉及到表單提交時也有相同的結果。有一些我想念我想.. – Sean

+0

任何想法..?感謝您的幫助,我對這個看似簡單的事情感到沮喪。 – Sean

+0

我並不真正熟悉那個寶石。如果你仍然需要幫助,我今晚會看看。 – Arel