2012-07-02 21 views
3

我有一個用戶模式,即可能有許多活動(我跟蹤的一些我的用戶執行的操作,用於統計目的)不知道如何申報此的has_many態關聯

class User < ActiveRecord::Base 
    has_many :activities 
    has_many :histories,:through => :activities # ? 
end 

class Activity < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :history, :polymorphic => true 
end 

class BrowsingHistory < ActiveRecord::Base 
    has_many :activities,:as => :histories 
end 

class LoginHistory < ActiveRecord::Base 
    has_many :activities,:as => :histories 
end 

... 

Activity類有一個history_type:string,一個history_id:integer和一個user_id:integer,我希望它能夠容納BrowsingHistoryLoginHistory對象。

我工作很少與多態關聯,從我到目前爲止,我不斷收到錯誤:ActiveRecord::HasManyThroughAssociationPolymorphicSourceError:Cannot have a has_many :through association 'User#histories' on the polymorphic object 'History#history'。我閱讀了有關這個主題的一些相關問題,但我無法找出解決方案。

編輯:我想我知道了(控制檯測試似乎工作),請你確認一下嗎?

class User < ActiveRecord::Base 
    has_many :activities 
    has_many :login_histories,:through => :activities,:source => :history,:source_type => "LoginHistory" 
end 

class Activity < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :history, :polymorphic => true 
end 

class BrowsingHistory < ActiveRecord::Base 
    has_many :activities,:as => :history 
    has_many :users,:through => :activities 
end 

class LoginHistory < ActiveRecord::Base 
    has_many :activities,:as => :history 
    has_many :users,:through => :activities 
end 

回答

3

這工作得很好:

class User < ActiveRecord::Base 
    has_many :activities 
    has_many :login_histories,:through => :activities,:source => :history,:source_type => "LoginHistory" 
end 

class Activity < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :history, :polymorphic => true 
end 

class BrowsingHistory < ActiveRecord::Base 
    has_many :activities,:as => :history 
    has_many :users,:through => :activities 
end 

class LoginHistory < ActiveRecord::Base 
    has_many :activities,:as => :history 
    has_many :users,:through => :activities 
end