与 join table 和多个别名的多对多关联

Many-to-many association with join table and multiple aliases

我正在开发一个地理藏宝应用程序,用户可以在其中创建新的缓存或访问现有的缓存。以下是型号:

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

联接 table 看起来是这样的,因为我一直在努力消除与大写或复数相关的任何潜在错误。每当我在 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?

然而,当我按照建议重新排列关联时,错误仍然存​​在。是否遗漏了一些小细节,或者我是否使用了完全不正确的范例来实现我想要完成的目标?

source必须以单数形式提供(documentationhas_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