ich folgende Modelle haben:Eager Last polymorphe Verbände
class Conversation < ActiveRecord::Base
belongs_to :sender, foreign_key: :sender_id, polymorphic: true
belongs_to :receiver, foreign_key: :receiver_id, polymorphic: true
.
class Owner < ActiveRecord::Base
.
class Provider < ActiveRecord::Base
.
class Account < ActiveRecord::Base
has_one :provider, dependent: :destroy
has_many :owners, dependent: :destroy
So in einem Gespräch, sender
kann ein Eigentümer oder ein Provider sein. In diesem Sinne kann ich Abfragen machen wie:
Conversation.includes(sender: :account).limit 5
Dies funktioniert wie vorgesehen. Das Problem ist, wenn ich eine Where-Klausel im zugehörigen Modell Account verwenden möchte. Ich möchte Gespräche filtern, deren Land "US" ist. Etwas wie folgt aus:
Conversation.includes(sender: :account).where('accounts.country' => 'US').limit 5
Aber das wird nicht funktionieren, erhalte ich die Fehler ActiveRecord::EagerLoadPolymorphicError: Cannot eagerly load the polymorphic association :sender
Was ist der richtige Weg, um diese Art von Abfrage zu tun?
Ich habe auch versucht, joins
zu verwenden, aber ich bekomme den gleichen Fehler.
versuchte 'Conversation.preload ...'? –
Ja, gibt den gleichen Fehler. –