为什么我不能更新has_many:通过rails 4中的关联

时间:2016-01-07 02:48:16

标签: ruby-on-rails ruby ruby-on-rails-4

我的项目是关于一个在线购物网站,使用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")

这是错的! 我不知道为什么它不起作用。

2 个答案:

答案 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