【问题标题】:Order child model by parent attribute in has_one association在 has_one 关联中按父属性排序子模型
【发布时间】:2024-09-14 07:55:02
【问题描述】:

我想按父母的姓名订购孩子

class Child < ApplicationRecord
  belongs_to :parent, -> { order(:name) }
end

class Parent < ApplicationRecord
  default_scope { order(:name) }

  has_one :child
end

但是

Child.includes(:parent).as_json(include: { parent: { only: :name } })

不返回正确的结果。 有什么好的办法吗?

【问题讨论】:

  • 你能做到吗:@children = Child.all.includes(:parent).order("parent.name desc")
  • @ruby_newbie 我不确定你的意思。
  • 我编辑了另一条评论。最终,我会在子级上定义一个名为“by_parent”的范围,该范围会返回此查询。
  • @ruby_newbie,你能分享一下范围吗?
  • Child.all.includes(:parent).order("parent.name desc") 不正确,因为父表不存在。也不需要 .all 。所以 Child.includes(:parent).order("parents.name desc") 是正确的。谢谢!

标签: ruby-on-rails ruby activerecord rails-activerecord


【解决方案1】:
Child.includes(:parent).order("parents.name desc").as_json(include: { parent: { only: :name } })

这对我有用。

【讨论】: