Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么可以';更新有很多:通过rails 4中的关联_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 为什么可以';更新有很多:通过rails 4中的关联

Ruby on rails 为什么可以';更新有很多:通过rails 4中的关联,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我的项目是关于一个在线购物网站,使用RubyonRails购买手机。 现在我正在尝试为用户创建一个篮子 class User < ActiveRecord::Base has_many :baskets has_many :phones, :through => :baskets end class Phone < ActiveRecord::Base has_many :baskets has_many :users , :through => :ba

我的项目是关于一个在线购物网站,使用RubyonRails购买手机。 现在我正在尝试为用户创建一个篮子

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是一个类,但篮子的关系属于该类的一个实例

所以类似这样的东西应该允许你使用关系

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')

首先,正如@Austio的回答所指出的,您需要在类的实例上使用关联方法,而不是类本身。所以:
.baskets
而不是
Phone.baskets

其次,如果要更新具有相同属性的集合的所有对象,则需要使用
update\u all
。那么,假设
phone
是一个特定的phone对象。那么你会想要:

phone.baskets.where(用户id:1)。全部更新(名称:“abc”)


update
方法设计用于更新单个对象的属性,或使用单独的属性哈希数组更新多个对象的数组:

它会给您带来什么样的错误?
Basket.find_by(user_id: 1, basket_id: 1).update(name: 'abc')