2009-03-28 3 views
2

У меня есть 3 стола - фильмы, films_genres (для подключения 2 стола) и жанры. В модели film.rb - has_and_belongs_to_many: жанры В модели genre.rb - has_and_belongs_to_many: фильмыRails named_scope с has_and_belongs_to_many

Итак, как я могу написать этот SQL-код:

SELECT * FROM genresfilms_genres INNER JOIN ON genres .id = films_genres .genre_id WHERE (films_genres .film_id = 1)

с именем_scope в Model film.rb для показа всех фильмов, прокатанных жанров?

ответ

7
class Model < ActiveRecord::Base 
    named_scope :by_genre, lambda { |*genres| 
    { 
     :include => :genres, 
     :conditions => [ "genres.id IN (?)", genres.map(&:id) ] 
    } 
    } 
end 

Film.by_genre(western, sci_fi).find(:all) 

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

+0

Большое спасибо, Брайан, отлично работает! – Yud

+0

Спасибо за это! –

0

На английском языке, что вы пытаетесь извлечь из БД? Чтобы получить жанры для конкретной пленки, просто выполните:

@genres = @film.genres 
0

chap! Я пытаюсь объединить из списка жанров, связанных с фильмом. И мой вопрос: как я могу это сделать, используя named_scome в film.rb Model? Мне нужно это для фильтра фильмов. Link, например: http://clearcove.ca/blog/2008/12/recipe-restful-search-for-rails/#more-218

Базы данных:

фильмы: ID имя DESCR год

films_genres: ID film_id genre_id

жанры: ID имя

+0

Похоже, вы пытаетесь создать динамический named_scope, но я все еще не совсем уверен, почему. Вы посмотрели на railscasts по теме? http://railscasts.com/episodes/108-named-scope и http://railscasts.com/episodes/112-anonymous-scopes – Chap

Смежные вопросы