ActiveRecord有很多通过两者都是多态的

时间:2016-04-21 16:18:36

标签: ruby-on-rails activerecord

我有如下所示的关联设置,但我从Rails中收到错误/异常,告诉我我没有正确设置关联。

以下是我所拥有的:

class Case
  has_many :case_accesses, as: :policy, inverse_of: :case, dependent: :destroy

  has_many :agents, through: :case_accesses, source: :ownable, source_type: 'Agent'
end

class CaseAccess
  belongs_to :policy, polymorphic: true

  belongs_to :ownable, polymorphic: true
end

class Agent
  has_many :case_accesses, as: :ownable, dependent: :destroy

  has_many :cases, through: :case_accesses
end

Rails的错误:

找不到源关联" case"或:CaseAccess模型中的案例。尝试&has 39:has_many:个案,:通过=> :case_accesses,:source => &#39 ;.它是政策,联系还是拥有的?

我尝试将源设置为拥有,并且在我的查询中导致问题。我该如何建立这种关联?它是传统的,但在一方,policy可以是CasePpae类型,ownable可以是{{1}类型1}}或Agent

表格列:

User

2 个答案:

答案 0 :(得分:1)

案例有许多case_accesses作为策略。 CaseAccess是策略,还是Case是CaseAccess的策略?

我相信你需要改变

has_many :case_accesses, as: :policy, inverse_of: :case, dependent: :destroy

has_many :case_accesses, inverse_of: :policy, dependent: :destroy

答案 1 :(得分:0)

这是做了什么:

class Case
  has_many :case_accesses, as: :policy, inverse_of: :policy, dependent: :destroy

  has_many :agents, through: :case_accesses, source: :ownable, source_type: 'Agent'

  has_many :users, through: :case_accesses, source: :ownable, source_type: 'User'
end

class CaseAccess
  belongs_to :policy, polymorphic: true

  belongs_to :ownable, polymorphic: true
end

class Agent
  has_many :case_accesses, as: :ownable, dependent: :destroy

  has_many :cases, through: :case_accesses, source: :policy, source_type: 'Case'
end