Zar*_*doz 5 activerecord ruby-on-rails-3
如何进行 ActiveRecord 查询,该查询按多态所属关联的属性进行排序?
例如,我有Tagging一个名为的模型,它具有一个名为tagged_item.
不幸的是Tagging.joins(:tagged_item)抛出一个ActiveRecord::EagerLoadPolymorphicError. 所以我不能做类似的事情Tagging.joins(:tagged_item).order("tagged_item.created_at DESC")。
有什么建议?
您不能直接与多态关系进行联接,因为多态对象的数据位于不同的表中。您仍然可以尝试手动执行此操作,如下例所示。
class Tagging < ActiveRecord::Base
belongs_to :tagged_item, :polymorphic => true
end
class Post
has_many :image_tagging, :as => :tagged_item
end
class Comment
has_Many :image_tagging, :as => :tagged_item
Tagging.select("taggins.*, COALESCE(posts.created_at, comments.created_at) AS tagged_item_created_at").
joins("LEFT OUTER JOIN posts ON posts.id = tagging.tagged_item_id AND tagging.tagged_item_type = 'Post'").
joins("LEFT OUTER JOIN comments ON comments.id = tagging.tagged_item_id AND tagging.tagged_item_type = 'Comment'").
order("tagged_item_created_at DESC")
Run Code Online (Sandbox Code Playgroud)
COALESCE 选择提供的第一列(如果存在),否则选择另一列。它与 mysql 中的 IFNULL 相同,或者您甚至可以使用 CASE WHEN ... IS NULL THEN ... ELSE ... END