在Rails 4

时间:2015-06-09 08:30:20

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

我正在阅读文档,他们说的是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

我错过了什么?

3 个答案:

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