我在模型之间有一个棘手的关联结构,我无法弄清楚如何实现它。
我有政策,每个政策都有政策参与者。
这些政策参与者可以是个人或公司,也可以是特定类型,例如保险公司或贡献者。每个策略只有一种策略参与者。
到目前为止我所拥有的:
class Policy < ActiveRecord::Base
has many :policy_participants
# insuree
has_one :insuree_participant, -> { insuree }, class_name: 'PolicyParticipant'
has_one :insuree, through: :policy_participants, -> { where(role: 1) }, source: :participant
end
class PolicyParticipant < ActiveRecord::Base
belongs_to :policy
belongs_to :participant, polymorphic: true
enum role: { insuree: 1, contributor: 2, etc: 3 }
end
class Person < ActiveRecord::Base # same for Company.rb
has_many :policy_participations, as: :participant
has_many :insuree_policy_participations, -> { insuree }, as: :participant
end
在rails控制台中,当我尝试policy.insuree时,我收到此错误:
ActiveRecord :: HasManyThroughSourceAssociationNotFoundError:找不到源关联&#34; insuree&#34;或者:模型PolicyParticipant中的保险公司。尝试&has 39:has_many:insuree,:through =&gt; :policy_participants,:source =&gt; &#39 ;.是政策,参与者,类型,地址,个人或公司吗?
我想到了一个人和公司的父类,但由于只有共同的名称,我宁愿避免这样做。
有人能帮助我吗?
答案 0 :(得分:0)
我认为这条线需要改变
has_one :insuree, through: :policy_participants, -> { where(role: 1) }, source: :participant
到
has_one :insuree, -> { where(role: 1) }, through: :policy_participants, source: :participant
lambda(或范围)需要是has_one
的第一个参数