我的Parent
有很多Children
,但只有一个Firstborn
。 Firstborn
是Child
,其中ChildType
为"长子"。
class Parent
has_many :children
has_one :firstborn, -> { includes(:child_type).references(:child_type).where("child_type.name = ?", "firstborn") }, class_name: "Child"
end
class Child
belongs_to :parent
belongs_to :child_type
end
class ChildType
has_many :children
end
以下代码执行 :
parent = Parent.find(1) # => <parent object>
firstborn = parent.firstborn # => nil
最终目标是能够在1个查询中检索所有父母和长子。
parents_and_firstborn = Parent.includes(:firstborn)
我正在寻找一个只执行1个查询的解决方案,并检索Parent
和相关Firstborn
个孩子。
我已经查看了有关has_one
的Rails 4.0.2 API文档,但没有一个例子
跨越多个表格,就像我试图做的那样。
更新时间:2014-10-16 14:40
以下&#34;工作&#34;但我不知道为什么:
parent = Parent.includes(:firstborn).find(1) # => <parent with firstborn>
为什么我在检索到firstborn
之后无法检索Parent
,但如果我在原始查询中includes(...)
它会返回它?
解决方案:2014-10-16 14:50
我在attr_accessor :firstborn
模型中仍然遇到Parent
模型以解决此问题。当我删除那些未使用的代码时,has_one :firstborn ...
代码按预期工作。
答案 0 :(得分:1)
看起来是正确的(ish),你应该调试正在执行的SQL。
我实际上从我在这里看到的问题来质疑ChildType表的优点。架构看起来过于复杂。为什么不使用first_born bool?