Rails 3: как сделать вызов базы данных для отношений HABTM - PullRequest
2 голосов
/ 09 октября 2011

Я установил отношения HABTM между моей пост-моделью, моделью жанра и моделью genres_posts. У моей модели жанра есть атрибут name: string, который состоит из таких имен, как «триллер», «вестерн», «ужас», «комедия» и т. Д., Когда пользователь создает сообщение, он может добавить к сообщению 1 или более жанров.

Мне нужно иметь возможность перечислять все сообщения пользователя по определенному жанру, чтобы они могли легко переключаться между всеми своими сообщениями с жанром 'western' и всеми сообщениями с жанром 'action'.

Post.last.genres дает мне жанры поста, но как мне сделать это для массива постов пользователя, таких как @ user.posts ?? а затем указать конкретное название жанра?

Это самый умный способ делать подобные вещи?

Ответы [ 2 ]

1 голос
/ 09 октября 2011

В дополнение к ответу ctcherry, это также возможно:

@user.posts.joins(:genres).where(:genres => {:name => 'western'})
1 голос
/ 09 октября 2011

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

@genre = Genre.find_by_name('western')
@posts = @genre.posts.where(:user_id => @user.id)
...