Ruby on rails rails连接多态关联

Ruby on rails rails连接多态关联,ruby-on-rails,activerecord,join,polymorphic-associations,Ruby On Rails,Activerecord,Join,Polymorphic Associations,在名为Notifiaction的模型中,我有一个名为Notifiable的多形态关联: module Notifiable def self.included(base) base.instance_eval do has_many :notifications, :as => :notifiable, :inverse_of => :notifiable, :dependent => :destroy end end end class

在名为
Notifiaction
的模型中,我有一个名为
Notifiable
的多形态关联:

module Notifiable
  def self.included(base)
    base.instance_eval do
      has_many :notifications, :as => :notifiable, :inverse_of => :notifiable, :dependent => :destroy
    end
  end
end

class Bill < ActiveRecord::Base
  include Notifiable
end

class Balance < ActiveRecord::Base
  include Notifiable
end

class Notification
  belongs_to :notifiable, :polymorphic => true
  belongs_to :bill, foreign_key: 'notifiable_id', conditions: "notifiable_type = 'Bill'"
  belongs_to :balance, foreign_key: 'notifiable_id', conditions: "notifiable_type = 'Balance'"
end
模块应报告
def自带(基本)
base.instance\u eval do
有许多:通知,:as=>:应通知,:reverse\u=>:应通知,:dependent=>:销毁
结束
结束
结束
类Billtrue
属于:bill,外键:'Notified_id',条件:“Notified_type='bill'”
属于:余额,外键:'Notified_id',条件:“Notified_type='balance'”
结束
当我尝试将通知加入到notifiable(
notification.joins{notifiable}
-这是squel,活动记录代码将有相同的结果)时,我得到了错误:
ActiveRecord::热切加载多态性错误:无法急切加载多态性关联:notifiable


我看到过一些关于这个异常的帖子,但是当我尝试加入表时,没有一篇是我的情况。可能吗?我缺少什么

您可以使用includes立即加载两个多态关联:

Notification.where(whatever: "condition").includes(:notifiable)
考虑到账单和余额结果都与查询结果匹配,include应该在查询结果中预加载这两个模型。即:

Notification.where(whatever: "condition").includes(:notifiable).map(&:notifiable)
# => [Bill, Balance, etc]

由于您已经声明了账单和余额协会,因此您可以加入各个协会并对其进行联合

差不多

scope :billiables_for_account, ->(account) do
  union_scope(joins(:bill).where(bills: {account: account}),
      joins(:balance).where(bills: {account: account}))
end

你能出示你的正确声明吗?我想你真的是指
类通知
,等等?我想你不能加入多态类型的关联。它应该是:
Notification.joins(:bill)
Notification.joins(:balance)