在ActiveRecord关联has_one中有奇怪的困惑吗?

时间:2014-01-22 06:24:32

标签: ruby-on-rails ruby activerecord

有两个模型AB,如下所示:

   class A < ActiveRecord::Base
      has_one :b,:foreign_key => :sid
   end

   class B < ActiveRecord::Base
      belongs_to :a,:foreign_key => :sid
   end

A有字段id,其中auto_increment,归档sid,其中uniq

B已提交sid我设置为primary_key

现在我希望通过b实例获取a实例。我的代码是这样的:

A.frist.b

我收到了错误

SELECT `b_model_name`.* FROM `b_model_name` WHERE `b_model_name`.`sid` = 1 LIMIT 1

数据库模型B中的注意事项记录哪些关联模型A首先按sid

我想知道查询为什么会这样

 SELECT `b_model_name`.* FROM `b_model_name` WHERE `b_model_name`.`sid` = 1 LIMIT 1

为什么不:

 SELECT `b_model_name`.* FROM `b_model_name` WHERE `b_model_name`.`sid` = a.sid LIMIT 1

1 个答案:

答案 0 :(得分:2)

你的代码对我来说没问题

您被投票的原因之一是我认为您通过为标准has_one / belongs_to关系定义自定义foreign_key来违反惯例

而且,我无法看到你真正想要实现的目标!如果模型完全不同,则必须定义自定义关系,但看起来它们是标准的has_one / belongs_to关系

也许你可以试试这个:

   class A < ActiveRecord::Base
      has_one :b, class_name: "B"
   end

   class B < ActiveRecord::Base
      belongs_to :a, class_name: "A"
   end

   as
   id | a1 | a2 | a3 | a4 | created_at | updated_at

   bs
   id | a_id | b1 | b2 | b3 | created_at | updated_at