2016-01-07 97 views
1

我的項目是關於一個在線購物網站,使用Ruby on Rails購買手機。 現在我正在嘗試爲用戶創建購物籃。爲什麼我無法更新has_many:通過rails 4關聯

class User < ActiveRecord::Base 
    has_many :baskets 
    has_many :phones, :through => :baskets 
end 

class Phone < ActiveRecord::Base 
    has_many :baskets 
    has_many :users , :through => :baskets 
end 

class Basket < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :phone 
end 

當我更新這樣的:

Phone.baskets.where(user_id:1).update(name:"abc") 

這是錯誤的! 我不知道爲什麼它不起作用。

+0

什麼樣的錯誤會給你帶來什麼? –

回答

1

這兩個不同的東西,類與實例。

電話是一類,但籃子的關係屬於該類的一個實例。

所以這樣的事情應該讓你使用的關係

instance_of_phone = Phone.first 
instance_of_phone.baskets.where(user_id: 1).update(name: 'abc') 

另一種方法是直接訪問

Basket.find_by(user_id: 1, basket_id: 1).update(name: 'abc') 
+0

謝謝!有效 –

0

首先,作爲@ Austio的回答中指出,你需要使用關聯類的實例,而不是類本身。所以:<specific instance of Phone>.baskets而不是Phone.baskets。其次,如果您要更新具有相同屬性的集合中的所有對象,則需要使用update_all。所以,假設phone是一個特定的電話對象。然後你會想:

phone.baskets.where(user_id:1).update_all(name:"abc")

update方法是設計用來更新一個單一對象的屬性,或者用單獨的屬性的數組更新多個對象的數組散列:http://apidock.com/rails/ActiveRecord/Base/update/class