Ruby on rails ActiveRecord关联中有奇怪的混乱吗?

Ruby on rails ActiveRecord关联中有奇怪的混乱吗?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,有两种型号A,B,如下所示: class A < ActiveRecord::Base has_one :b,:foreign_key => :sid end class B < ActiveRecord::Base belongs_to :a,:foreign_key => :sid end A.frist.b 我出错了 SELECT `b_model_name`.* FROM `b_model_name` WHER

有两种型号
A
B
,如下所示:

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

   class B < ActiveRecord::Base
      belongs_to :a,:foreign_key => :sid
   end
A.frist.b
我出错了

SELECT `b_model_name`.* FROM `b_model_name` WHERE `b_model_name`.`sid` = 1 LIMIT 1
注意在数据库模型
B
中先有
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

我觉得你的代码没问题

您被否决的原因之一是,我认为您违反了惯例,为标准关系定义了自定义的
外键

而且,我看不出你到底想达到什么目的!如果模型完全不同,则必须定义一个自定义关系,但看起来它们是一个标准的
has_one/behing_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
class A