Ruby on rails RAILS-4-有很多
我有两种型号,卖家和客户。 我希望它是一个客户有一个卖家,很多客户可以有相同的卖家 理想情况下,我想做客户。卖家=卖家 通过“属于”关联,卖家可以属于一个客户。 虽然我的cas un客户只能有一个卖家,但我使用has_,并且_属于多个协会Ruby on rails RAILS-4-有很多,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有两种型号,卖家和客户。 我希望它是一个客户有一个卖家,很多客户可以有相同的卖家 理想情况下,我想做客户。卖家=卖家 通过“属于”关联,卖家可以属于一个客户。 虽然我的cas un客户只能有一个卖家,但我使用has_,并且_属于多个协会 # migration create_table :sellers do |t| t.string :name t.timestamps null: false end create_table :customers do |t|
# migration
create_table :sellers do |t|
t.string :name
t.timestamps null: false
end
create_table :customers do |t|
t.string :name
t.timestamps null: false
end
create_table :customers_sellers, id: false do |t|
t.belongs_to :customer, index: true
t.belongs_to :seller, index: true
end
# models/seller.rb
class Seller < ActiveRecord::Base
has_and_belongs_to_many :customers
end
# models/customer.rb
class Customer < ActiveRecord::Base
has_and_belongs_to_many :sellers
end
我有个错误
NoMethodError: undefined method `each' for #<Seller:0x0000000582fb18>
我想在我的customer.sellers.name中也修改它
可以这样做吗?好的,首先,
Seller.first.name=“Bud”
不更新数据库,在Seller.first
实例上设置了name
属性,该属性随后会丢失,因为您没有将其分配给任何变量
因此,您需要将其更改为:
Seller.first.update name: "Bud"
为了用新值更新数据库,或者(更可能)类似于:
seller = Seller.first
seller.name = "Bud"
seller.save
这是第一步,实际上是将该值保存到数据库中
第二个问题是,如果您已经从数据库中读取了
customer.sellers
,那么您的应用程序已经在内存中存储了每个name
的值,您需要至少从数据库中重新加载第一条记录,以获得新的值:
customer.sellers.reload
现在(我假设
Seller.first
也是customer.sellers.first
)customer.sellers.first.name
将是“Bud”
好的,所以首先,Seller.first.name=“Bud”
不更新数据库,该name
属性是在Seller上设置的。首先
实例会丢失,因为您没有将其分配给任何变量
因此,您需要将其更改为:
Seller.first.update name: "Bud"
为了用新值更新数据库,或者(更可能)类似于:
seller = Seller.first
seller.name = "Bud"
seller.save
这是第一步,实际上是将该值保存到数据库中
第二个问题是,如果您已经从数据库中读取了
customer.sellers
,那么您的应用程序已经在内存中存储了每个name
的值,您需要至少从数据库中重新加载第一条记录,以获得新的值:
customer.sellers.reload
现在(我假设
Seller.first
也是customer.sellers.first
)customer.sellers.first.name
将是“Bud”
谢谢你的工作;)!但我仍然不能“customer.sellers=seller”,这对我的工作并不重要,但我不明白为什么。customer.sellers
是一个集合,而您正试图为该集合指定一个卖家。您可以分配给集合,但必须分配对象
,复数形式很重要,您需要为集合分配一个集合(一个数组将起作用)。谢谢它的作用;)!但我仍然不能“customer.sellers=seller”,这对我的工作并不重要,但我不明白为什么。customer.sellers
是一个集合,而您正试图为该集合指定一个卖家。您可以分配给集合,但必须将对象
分配给它,复数形式很重要,您需要为集合分配一个集合(数组将起作用)。