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)
。