2011-05-12 15 views
2

通常,當我添加一個新產品的@announcement,我做的:什麼是update_attributes的等價物?

@announcement = Announcement.find(params[:id]) 
@announcement.products << Product.find_all_by_id(params[:announcement_products]) 

什麼做@announcement.products << Product.find_all_by_id(params[:announcement_products])update_attributes()相當於?

作爲參考,我的模型的定義是這樣的:

模型

class Product < ActiveRecord::Base 
    has_many :announcement_products 
    has_many :announcements, :through => :announcement_products 

    accepts_nested_attributes_for :announcements#, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true 
end 

class Announcement < ActiveRecord::Base 
    has_many :announcement_products 
    has_many :products, :through => :announcement_products 

    accepts_nested_attributes_for :products#, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true 
end 

class AnnouncementProduct < ActiveRecord::Base 
    belongs_to :announcement 
    belongs_to :product 
end 
+1

我不確定你想要完成什麼。在你的例子中,你正在分配has_many關係,但你的問題似乎是關於更新關係的屬性。你能更好地描述投入和預期結果嗎? – Chap

+0

基本上,一個公告可以有許多產品。可以說我有3種產品,Announcement.first有分配給它的前兩種產品。我希望能夠在Announcement.first中添加第三個產品。這就是我想要做的 –

+0

假設你想更新公告中附加的產品集,將會@@announcement.products = Product.find_all_by_id(params [:announcement_products])'不要這麼做嗎?我錯過了什麼? –

回答

2

只需設置:附件中的參數中的product_ids。所以

{:announcement=>{:name=>"foo222", :description=>"bar", :product_ids => [8, 9]}} 

是你在找什麼。這可以通過在http請求中發送「數組」的複選框或其他任何東西來實現。

另外,如果您使用的是attr_accessible,請不要忘記將product_ids屬性添加到列表中,如果需要,請記住要注意質量分配。

2

查找該協會中的方法的has_many給你。其中有「association_ids =」,它需要一個id數組。這與update_attributes方法效果很好,因爲如果你這樣做

params = {:product => {:announcement_ids => [1,2,3]}} 
@product.update_attributes(params[:product]) 

,有效地做

@product.announcement_ids = [1,2,3] 

這與形式複選框效果很好,寫公告ID,以「產品[公告] []」爲例。

+0

在控制檯中,我試過了:params = {:announcement => {:name =>「foo111」,:description =>「bar」, :products => {:product_ids => [8,9,10]}}}; Announcement.find(37).update_attributes!(PARAMS [:公告])。公告記錄(用於名稱和描述)發生變化。但是,AnnouncementProduct模型(announcement_products表)上沒有添加新記錄。任何我缺少的東西? –

相關問題