我知道有很多的資源在這一點,但我有相關的任何人到我的情況,所以我希望有人能幫助我澄清是如何工作的一個艱難的時期:幫助理解polymophic協會(導軌)
基本上,我有一個模型Action
(它會在用戶做某些事情會影響另一個用戶時創建,例如評論他們的文章或對某人的照片進行投票),這些操作將在用戶儀表板頁面中列出,已經發生的與他們有關的行爲,如流...有點像Github的「新聞饋送」
我決定去創造一個多態關聯,這裏是我的模型看起來像:
class Action < ActiveRecord::Base
belongs_to :instigator, :polymorphic => true
belongs_to :victim, :polymorphic => true
end
我用始作俑者和受害者,因爲任何人都可以創建這些動作,這又總是影響其他用戶,這裏是我的User
模型
class User < ActiveRecord::Base
has_many :actions, :as => :instigator
has_many :actions, :as => :victim
end
而這正是我想我會錯,因爲最終我想有,當我運行像User.find(1).actions
查詢實際返回的所有研究所其中用戶既是instigator
或victim
,我認爲我不能同時擁有這兩個have_many
,因爲當像這樣使用時,我只能得到用戶爲victim
的實例。
這裏是我的移民:
create_table :actions do |t|
t.references :instigator, :polymorphic => true
t.references :victim, :polymorphic => true
t.string :action_performed
t.references :resource, :polymorphic => true
t.timestamps
end
感謝您的幫助,我永遠愛偉大的建議和幫助多所社區給予。
資源看起來像一個很好的候選人多態關係,但除非有比這可能需要對教唆者或受害者的角色用戶的其他實體始作俑者和受害者不應該是多態的。 – 2010-09-06 09:55:46