我的项目是关于一个在线购物网站,使用Ruby on Rails购买手机。 现在我正在尝试为用户创建篮子。
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)
这两个不同的东西,Class vs Instance。
手机是一个类,但篮子的关系属于该类的实例。
所以这样的事情应该允许你使用关系
print_r($_GET);
另一种方法是直接访问
instance_of_phone = Phone.first
instance_of_phone.baskets.where(user_id: 1).update(name: 'abc')
答案 1 :(得分:0)
首先,正如@Austio的回答所指出的,你需要在类的实例上使用关联方法,而不是类本身。所以:<specific instance of Phone>.baskets
而不是Phone.baskets
。
其次,如果您要更新具有相同属性的集合的所有对象,则需要使用update_all
。所以,假设phone
是一个特定的Phone对象。然后你会想要:
phone.baskets.where(user_id:1).update_all(name:"abc")
update
方法旨在更新单个对象的属性,或使用单独的属性哈希数组更新多个对象的数组:http://apidock.com/rails/ActiveRecord/Base/update/class