我有两个型号,卖家和客户。我希望它是一个客户有一个卖家,许多客户可以有相同的卖家。
理想情况下,我希望可以使用customer.seller = seller与belongs_to关联,卖方可以属于一个客户。我使用has_and_belongs_to_many关联,虽然a在我的can非客户只能有一个卖家。
# 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所以我不能做那样的事:
customer = Customer.create(name: "John")
seller = Seller.create(name: "Dave")
customer.sellers = seller我有个错误
NoMethodError: undefined method `each' for #<Seller:0x0000000582fb18>但我可以:
customer.sellers<< seller但如果我这样改变卖家的名字
Seller.first.name = "Bud"我希望它也在我的customer.sellers.name中被修改。
有可能做这样的事吗?
发布于 2016-03-04 00:32:51
好的,首先,Seller.first.name = "Bud"不做任何更新数据库的事情,name属性是在Seller.first实例上设置的,该属性随后丢失,因为您没有将它分配给任何变量。
因此,您需要将其更改为:
Seller.first.update name: "Bud"为了用新值更新DB,或者(更有可能)类似于:
seller = Seller.first
seller.name = "Bud"
seller.save这是第一步,实际上是将这个值保存到数据库中。
第二个问题是,如果您已经从数据库中读取了customer.sellers,那么您的应用程序已经具有存储在内存中的每个name的值,您至少需要从DB重新加载第一条记录,以便获得新的值:
customer.sellers.reload现在(我假设Seller.first也是customer.sellers.first) customer.sellers.first.name将是"Bud"
https://stackoverflow.com/questions/35785691
复制相似问题