我正在阅读文档,他们说的是belongs_to:
指定与另一个类的一对一关联。这种方法 只应在此类包含外键时使用。
我有3个型号:
Info
Customer
Seller
我需要将每个Customer或Seller实例链接到infos表中的一行。
所以我想我只需要将foreing_key info_id放在2个模型中,并指定belongs_to :info
关联。
但是当我这样做时:
@customer.info
它给了我错误,因为它试图执行此查询:
SELECT `auth_infos`.* FROM `auth_infos` WHERE `auth_infos`.`customer_id` = 1 LIMIT 1
但是对于我需要的东西以及我从文档中取消的东西,它应该执行这个:
SELECT `auth_infos`.* FROM `auth_infos` WHERE `auth_infos`.`id` = 1 LIMIT 1
我错过了什么?
答案 0 :(得分:1)
你应该这样做
信息模型
has_one :customer
has_one :seller
客户模式
belongs_to :info
卖家模式
belongs_to :info
belongs_to 的模型始终包含外键。因此,customer和seller表将具有info_id外键。
info_id
之后,您可以将客户和卖家与信息联系起来,反之亦然。
@customer.info
@info.customer
@seller.info
@info.seller
答案 1 :(得分:0)
文档错误地表达了这种关系。 " belongs_to的"并没有说明关于其他模型的基数的任何内容,只是无论其他模型是什么,它只能有0或者其中任何一个" belongs_to"它
如果......
2.50
...然后一本书可以有零或一个价格,而价格只能属于一本书。
如果......
Price belongs_to Book
Book has_one Price
...然后一本书可以有零或多个价格,而且价格只能属于一本书。
如果客户或卖家可选最多只有一个Info,并且onfo可以有零个或一个客户或卖家,那么让Info多态并让客户和卖家" has_one informable" (或类似的)。然后Info" belongs_to informable"
答案 2 :(得分:0)
您可以使用多态关联。使信息模型具有多样性。
info.rb
class Info < ActiveRecord::Base
belongs_to :informable, polymorphic: true
end
customer.rb
class Customer < ActiveRecord::Base
has_one :info, as: :informable
end
seller.rb
class Seller < ActiveRecord::Base
has_one :info, as: :informable
end