[英]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.