2017-08-24 130 views
0

我正在尋找一個地理緩存應用程序,用戶可以在其中創建新緩存或訪問現有緩存。下面是型號:與連接表和多個別名的多對多關聯

class User < ApplicationRecord 
    has_many :usercaches 
    has_many :visited_caches, source: :caches, through: :usercaches 
    has_many :created_caches, class_name: :caches 
end 

class Cache < ApplicationRecord 
    has_many :usercaches 
    has_many :visitors, source: :users, through: :usercaches 
end 

class Usercache < ApplicationRecord 
    belongs_to :user 
    belongs_to :cache 
end 

連接表看起來它確實是因爲我一直在試圖消除與資本化或多元化的任何潛在錯誤的方式。每當我創建的Rails控制檯的用戶和嘗試看看new_user.visited_caches,我得到以下錯誤:

ActiveRecord::HasManyThroughSourceAssociationNotFoundError: Could not find the source association(s) :caches in model Usercache. Try 'has_many :visited_caches, :through => :usercaches, :source => '. Is it one of user or cache?

當我重新安排的建議的關聯,但是,錯誤是一樣的。是否有一些我想念的小細節,還是我正在爲完成我想要的完全不正確的範式工作?

回答

1

source必須以單數形式來提供(所述documentation用於has_many提供了一種例如用於它):

class User < ApplicationRecord 
    has_many :usercaches 
    has_many :visited_caches, source: :cache, through: :usercaches 
    has_many :created_caches, class_name: :caches 
end 

class Cache < ApplicationRecord 
    has_many :usercaches 
    has_many :visitors, source: :user, through: :usercaches 
end 

class Usercache < ApplicationRecord 
    belongs_to :user 
    belongs_to :cache 
end