我有一個問題設置Rails has_many:through:polymorphic關係。Rails的命名has_many:通過:多態關係
我知道這個問題是welldocumented對所以但我認爲我的問題是我的模型和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'.
我假設的問題是什麼做的事實,我將用戶關係稱爲:負責任。這是正確的嗎?
任何幫助將不勝感激,謝謝。
多態關係的另一面是什麼模型?它只是里程碑還是其他任何模型?當你在做User.first.responsibilities時,你是否期望獲得Milestone對象? belongs_to:responsibility::polymorphic => true – Abid 2012-04-20 16:03:26
多態關係中還會有其他模型,但Milestone是迄今爲止我唯一建立的模型。當我做'User.first.responsibilities'時,我期待里程碑對象是。 – Pete 2012-04-20 16:07:29
啊好吧@你讓我想你的問題。我自然無法通過:多態關係拉出「職責」集合,因爲它們都屬於不同的對象。因此,我必須對用戶模型進行更具體的說明,並說明我需要的職責,即'has_many:milestone_responsibilities,:through =>:responsible_items,:source =>:responsibility,:source_type =>'Milestone'' – Pete 2012-04-20 16:18:21