Ruby on rails Rails 5包括和多态性

Ruby on rails Rails 5包括和多态性,ruby-on-rails,rails-activerecord,ruby-on-rails-5,polymorphic-associations,Ruby On Rails,Rails Activerecord,Ruby On Rails 5,Polymorphic Associations,我正在使用Rails 5并尝试下一步操作 class Song has_and_belongs_to_many :artists end class UnknownSong end class Library belongs_to :media, polymorphic: true belongs_to :song, foreign_key: :media_id, foreign_type: :media_type belongs_to :unknown_song, for

我正在使用Rails 5并尝试下一步操作

class Song
  has_and_belongs_to_many :artists
end

class UnknownSong
end

class Library
  belongs_to :media, polymorphic: true

  belongs_to :song, foreign_key: :media_id, foreign_type: :media_type
  belongs_to :unknown_song, foreign_key: :media_id, foreign_type: :media_type
end
当我运行此查询时

Library.includes(song: [:artists], :unknown_song)
rails生成下一个sql

SELECT "songs".* FROM "songs" WHERE "songs"."id" IN (391497, 921, 1469, 172)
SELECT "unknown_songs".* FROM "unknown_songs" WHERE "unknown_songs"."id" IN (391497, 921, 1469, 172)
并尝试用相同的ID加载不同的多态模型

data in database


如何解决此问题?

您希望那里有什么sql?
song
unknown\u song
的定义完全相同(除了名称)。因此,我不明白为什么/如何使用不同的ID。我认为foreign_type::media_type基于数据库中的多态字段“media_type”,请在说明中添加更多说明为什么首先使用多态性?为什么不使用一个
songs
table/model并使用枚举来区分呢?这将为您省去一大堆麻烦和潜在的性能问题。您希望那里有什么sql?
song
unknown\u song
的定义完全相同(除了名称)。因此,我不明白为什么/如何使用不同的ID。我认为foreign_type::media_type基于数据库中的多态字段“media_type”,请在说明中添加更多说明为什么首先使用多态性?为什么不使用一个
songs
table/model并使用枚举来区分呢?这会让你省去很多麻烦和潜在的性能问题。