【发布时间】:2014-07-08 23:08:29
【问题描述】:
我想这是一个重复的问题,但我还没有找到它,所以我想我会问。我有一个User 模型,它通过多态关联具有不同类型的Profile 模型。比如:
class User < ActiveRecord::Base
belongs_to :profile, polymorphic: true
end
class Profile < ActiveRecord::Base
has_one :user, as: :profile
end
class FacebookProfile < ActiveRecord::Base
has_one :user, as: :profile
end
我想对 User 执行查询,返回按其个人资料对象的名字排序的用户。在没有任何多态关系之前,我可以通过在 :profile 上的 joins 开始来做到这一点,但我知道这不适用于多态性。
除了使用sort 或sort_by 之外,还有更好的方法吗:
User.all.sort_by {|user| user.profile.first_name }
【问题讨论】:
-
请注意,如果 FacebookProfile 从 Profile 继承,这在您的示例中似乎是最合乎逻辑的结构,您不会有任何问题。话虽如此,您可以对 n 个表执行 n 个查询并混合结果。我看到的另一种方法是缓存您在 User 模型中使用的名称。
标签: ruby-on-rails postgresql polymorphic-associations active-record-query