gpt4 book ai didi

ruby-on-rails-3 - 按多态的belongs_to 属性排序

转载 作者:行者123 更新时间:2023-12-01 06:45:06 26 4
gpt4 key购买 nike

如何进行 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")

如果存在,则 COALESCE 选择提供的第一列,否则选择另一列。它与 mysql 中的 IFNULL 相同,或者您甚至可以使用 CASE WHEN ... IS NULL THEN ... ELSE ... END

关于ruby-on-rails-3 - 按多态的belongs_to 属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com