我在Rails 5中具有以下db(Postgresql)结构:
class Book < ApplicationRecord
belongs_to :location
end
class Song < ApplicationRecord
belongs_to :location
end
class Location < ApplicationRecord
# position INT
end
class Item < ApplicationRecord
belongs_to :product, polymorphic: true # Book or Song
has_one :location, through: :product
end
# Expected result
Item.includes(product: :location).order('locations.position ASC')
Item.first.location
# Actual result
# ActiveRecord::EagerLoadPolymorphicError (Cannot eagerly load the polymorphic association :product)
但是我很难通过多态的 Product 引用 Location 。可能是我在这里错过了一些选择并选择了错误的数据库结构吗?您能在这里建议一些“ Rails way”解决方法,而不是原始sql吗?
答案 0 :(得分:1)
我不了解您的商品模型,但通常是这样设置多态的:
class Book < ApplicationRecord
has_one :location, as: :locateable, class_name: Location
end
class Song < ApplicationRecord
has_one :location, as: :locateable, class_name: Location
end
class Location < ApplicationRecord
belongs_to :locateable, polymorphic: true
end
答案 1 :(得分:1)
原因是您做错了。在您的代码中,您说的是产品将是多态的,但语法仍然错误,并且在其他模型中不包括该多态关联。.请检查以上答案并检查导轨进一步说明的官方指南。