Предположим, у меня есть модель пользователя и модель фильма, а также таблицы для их хранения. Предположим, я хочу добавить функцию списка наблюдения, добавив третью таблицу с именем lists_movies, которая просто сопоставляет user_id с movie_id.Как получить ассоциацию Rails для использования определенного имени для доступа к модели другого имени?
Я хочу добавить в список избранных товаров. Я хочу иметь возможность запрашивать ActiveRecord с user.watchlist_movies и получать коллекцию объектов фильма. До сих пор я пытался (в user.rb)
has_many :watchlist_movies
и
has_many :movies, through: watchlist_movies
Первые результаты в user.watchlist_movies возвращающих записи и второй возвращает коллекцию записей фильмов в user.movies. По сути, я хочу, чтобы user.watchlist_movies возвращал коллекцию записей фильмов, поэтому я хочу, чтобы доступ, как определено в первом отношении, возвращал содержимое второго отношения. Как мне это сделать?
Так что я не понимаю, как вы думаете, лучший способ моделирования этих отношений. Вы говорите, что has_many: фильмы, через: lists_movies идеально? –
Что вы имеете в своем первоначальном вопросе - это способ учебника, чтобы сделать это, и я бы не стал менять имена, если у вас не было очень веской причины. Личные предпочтения, когда они вступают в противоречие с соглашениями Rails, обычно следует игнорировать. Последовательность приводит к меньшему количеству неожиданностей в будущем. Теперь вам может показаться странным, но большинство разработчиков Rails обнаруживают, что ваш код там точно так, как ожидалось, так оно и будет. Вызов 'user.watchlist_movies' и получение модели фильма назад действительно запутывает кого-то, кто не знаком с вашими соглашениями об именах. – tadman
Достаточно честный. Если я поеду на этот маршрут, должен ли я иметь модель lists_movies? Могу ли я просто иметь таблицу соединений без модели и использовать ассоциацию has_and_belongs_to_many? Кроме того, одна из причин, по которой я не хотел использовать user.movies, заключается в том, что в будущем у них могут быть другие списки. У них были бы фильмы через другие ассоциации. –