不能急切地加载多态关联

时间:2014-10-15 00:32:44

标签: ruby-on-rails join polymorphic-associations

我收到错误 无法急切加载多态关联:messageable_fromuser

online = Message.all.joins(:messageable_fromuser)

我试过

online = Message.all.includes(:messageable_fromuser)

但它不包括结果中的连接表。使用includes时,我在日志中看到两个查询。我不知道为什么人们建议使用包括急切负载。两个查询如何加入任何内容?

3 个答案:

答案 0 :(得分:1)

对于多态,您需要手动设置联接。

Message.joins("JOIN polymorphic_association.owner_id = messages.id AND polymorphic_association.owner_type = 'User'")

如果您想动态地建立关系,可以这样做:

owner_type = 'User' # or whatever other models can have the association
Message.joins("JOIN polymorphic_association.owner_id = messages.id AND polymorphic_association.owner_type = ?", owner_type)

答案 1 :(得分:0)

很多时间过去了,但我也遇到了这个问题,对我来说使用preloading会有所帮助。 https://github.com/rails/rails/blob/6-0-stable/activerecord/lib/active_record/associations.rb#L161

答案 2 :(得分:0)

使用 preload 应该可以解决错误:

online = Message.preload(:messageable_fromuser)