Нельзя создать соединение напрямую с полиморфными отношениями, поскольку данные полиморфных объектов находятся в разных таблицах.Тем не менее, вы можете попытаться сделать это вручную, как в следующем примере.
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 выбирает первый предоставленный столбец, если существует, в противном случае - другой.Это то же самое, что IFNULL в mysql, или вы даже можете использовать CASE WHEN ... NULL THEN ... ELSE ... END