named_scope и HABTM ассоциация - PullRequest
       0

named_scope и HABTM ассоциация

1 голос
/ 12 августа 2010

У меня есть модели Пользователь

class User < ActiveRecord::Base  
  has_many :ratings  
  has_many :rated_films, :through => :ratings, :source => :film  
end  

и фильмы

class Film < ActiveRecord::Base  
  has_many :users, :through => :ratings  
end  

Я ищу, чтобы найти все фильмы, которые не были оценены указанным пользователем, что-то вроде

class Film < ActiveRecord::Base  
  has_many :users, :through => :ratings  
  named_scope :not_rated_by_user, lambda { |user|  
    {:joins => :users, :conditions => ['? NOT IN users', user]}  
  }  
end  

Film.not_rated_by_user(User.first)  

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

Большое спасибо

Юрий

1 Ответ

0 голосов
/ 12 августа 2010

Полагаю, у вас есть таблица ratings, которая является вашей join таблицей. Правильно? Так что вам нужно что-то вроде:

class User < ActiveRecord::Base  
   has_many :ratings
   has_many :rated_films, :through => :ratings, :source => :film  
end

class Film < ActiveRecord::Base  
   has_many :ratings
   has_many :users, :through => :ratings

   named_scope :not_rated_by_user, lambda { |user_id| {
      :include => :ratings,
      :conditions => ['? NOT IN (ratings.user_id)', user_id]
   }}
end

class Rating < ActiveRecord::Base
   belongs_to :film
   belongs_to :user
end

И вы можете использовать

Film.not_rated_by_user(User.first.id)

Пожалуйста, дайте мне знать, если это помогло. Я не проверял!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...