named_scope and HABTM association
I have a models User
class User < ActiveRecord::Base  
  has_many :ratings  
  has_many :rated_films, :through => :ratings, :source => :film  
end  
and Films
class Film < ActiveRecord::Base  
  has_many :users, :through => :ratings  
end  
I am looking to find all Films that have not been rated by 开发者_高级运维the specified user, smth like
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)  
I am not that familiar with SQL so am not quite sure if this could be achieved in a named scope.
Many thanks
Yuriy
I suppose you have a ratings table, which is your join table. Right? So you need something like:
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
And you can use
Film.not_rated_by_user(User.first.id)
Please let me know if it helped. I haven't tested!
 加载中,请稍侯......
      
精彩评论