2015-12-03 54 views
0

我有一個User模型:試圖 '別名' 多態的has_many關係

class User < ActiveRecord::Base 
    has_many :tracks, dependent: :destroy 
    has_many :tracked_locations, through: :tracks, source: :tracking, source_type: 'Location' 

Track模型(認爲它是 '下面'):

class Track < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :tracking, polymorphic: true 
end 

這裏的想法是我將有很多模型來跟蹤/跟蹤,因此我使用多態性。比如我有一個Location模型:

class Location < ActiveRecord::Base 
    has_many :tracks, :as => :tracking, :dependent => :destroy 
    has_many :users, through: :tracks 

現在Location.first.users工作與User.first.tracked_locations沿細控制檯。

現在我將沿着Flagged的行添加另一個多態關係。用戶可以用筆記等「標記」另一個模型。因此,如果我將has_many :users, through: :flagged添加到Location模型,例如我需要區分跟蹤用戶和標記用戶。

我想:

has_many :tracking_users, through: :tracks, source: :tracking, source_type: 'User' 

,但我得到:

NoMethodError: undefined method `evaluators_for' for #<Location:0x007ff29e5409c8> 

我甚至可以做到這一點還是我失去了一些東西簡單嗎?

UPDATE

基於答案下面我想通了:

has_many :tracking_users, through: :tracks, class_name: "User", foreign_key: "user_id", source: :user 

回答

1

我不是這個100%,但你可以嘗試:

has_many :tracking_users, through: :tracks, class_name: "User", foreign_key: "user_id", source: :user 

或者你也可以創建一個類方法並手動完成。

def self.tracking_users 
    user_ids = tracks.collect(&:user_id) 
    User.where(id: user_ids) 
end 

編輯:有一個brainfart,改變了「源」到那裏:用戶。這會告訴您使用您提供的其他屬性實際執行查找的表。當然它不會在:軌跡

+0

關閉但它拋出的錯誤指向我猜測的正確方向:has_many:tracking_users,通過:: tracks,class_name:「User」,foreign_key:「user_id」,來源::工作的用戶 –