2

我看到大量使用父元素上的属性进行排序的示例,但对于祖父母却没有。如果那里有另一篇详细说明这一点的帖子,我找不到它,也许是因为我不知道这个词。所以,这是我的理论模型:

class GrandParent < ActiveRecord::Base
    has_many :parents
    has_many :children, through: :parents
end


class Parent < ActiveRecord::Base
    belongs_to :grand_parent
    has_many   :children
end


class Child < ActiveRecord::Base
    belongs_to :parent
end

所以,我试图提供一个孩子的名单,但我希望它按祖父母排序。

我正在尝试无用的事情,例如Child.joins(:grandparent).order('grandparent.name').all

但这不是为我做的。我已经尝试了一百种其他变体,但我不能说它们背后有多少逻辑……有人对这个有什么好的想法吗?

4

2 回答 2

4

你可以试试

Child.joins(:parent => :grand_parent).order('grand_parents.name')
于 2013-03-29T17:25:29.940 回答
1

如果您不关心速度,则可以使用更明确的方式对这些对象进行排序,这种方式易于理解。尤其,

children.sort_by{|child| child.grand_parent.name}

它没有使用完整的 SQL,如果你有很多 SQL 也不会很好children,但有时为了便于实施,值得优化。

于 2013-03-29T00:37:45.440 回答