簡體   English   中英

命名一個Rails has_many:through:多態關系

[英]Naming a Rails has_many :through :polymorphic relationship

我有一個問題設置Rails has_many:通過:多態關系。

我知道這個主題在SO上有很好的 文檔 ,但我認為我的問題取決於我的模型和foreign_key名稱,而不是語法,即我認為這是“我一直在看代碼太長”的問題,只需要另一個一雙眼睛。

無論如何,我有以下設置:

class Milestone < ActiveRecord::Base
  has_many :responsible_items, :as => :responsibility
  has_many :responsible, :through => :responsible_items
end

class ResponsibleItem < ActiveRecord::Base
  belongs_to :responsible, :class_name => "User"
  belongs_to :responsibility, :polymorphic => true
end

class User < ActiveRecord::Base
  has_many :responsible_items, :foreign_key => :responsible_id
  has_many :responsibilities, :through => :responsible_items
end

從里程碑方面來看,這似乎沒有錯誤。 例如在終端我可以寫:

Milestone.first.responsible

......按照我的預期得到一個空集合。

但是,從用戶方面來說,運行:

User.first.responsibilities

...正在返回AR錯誤:

ActiveRecord::HasManyThroughAssociationPolymorphicSourceError: Cannot have a has_many :through association 'User#responsibilities' on the polymorphic object 'Responsibility#responsibility'.

我假設這個問題與我將用戶關系稱為:負責人這一事實有關。 這是正確的嗎?

任何幫助將不勝感激,謝謝。

感謝@ Abid的評論,我考慮了為用戶responsibilities所有responsibilities的后勤工作,這是不可行的。 我需要從關系中更加具體地了解我想要的東西,並且結果定義了以下工作:

class User < ActiveRecord::Base
  has_many :responsible_items, :foreign_key => :responsible_id
  has_many :milestone_responsibilities, :through => :responsible_items, :source => :responsibility, :source_type => 'Milestone'
end

然后,我可以擴展它,因為我在其他模型上添加了更多的多態關系,例如:

class User < ActiveRecord::Base
  has_many :responsible_items, :foreign_key => :responsible_id
  has_many :milestone_responsibilities, :through => :responsible_items, :source => :responsibility, :source_type => 'Milestone'
  has_many :task_responsibilities, :through => :responsible_items, :source => :responsibility, :source_type => 'Task'
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM