Связь многие-ко-многим с таблицей соединений и несколькими псевдонимами

Я работаю над приложением для геокэшинга, в котором пользователи могут создавать новый кеш или посещать существующий. Вот модели:

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

Таблица соединений выглядит именно так, потому что я пытался устранить любые потенциальные ошибки, связанные с использованием заглавных букв или множественного числа. Всякий раз, когда я создаю консоль User in Rails и пытаюсь посмотреть new_user.visited_caches, я получаю следующую ошибку:

ActiveRecord :: HasManyThroughSourceAssociationNotFoundError: не удалось найти исходную ассоциацию (и): кеши в модели Usercache. Попробуйте 'has_many: visit_caches,: through =>: usercaches,: source =>'. Это один из пользователей или кеш?

Однако, когда я переставляю ассоциацию, как было предложено, ошибка остается той же. Есть ли какая-то мелочь, которую мне не хватает, или я работаю с совершенно неправильной парадигмой того, чего я хочу достичь?


person David Kennell    schedule 24.08.2017    source источник


Ответы (1)


source должен быть предоставлен в единственном числе (документация for 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
person Igor Drozdov    schedule 24.08.2017