有两个模型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
有字段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
答案 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