Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 命名_范围和HABTM协会_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 命名_范围和HABTM协会

Ruby on rails 命名_范围和HABTM协会,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一个模型用户 class User < ActiveRecord::Base has_many :ratings has_many :rated_films, :through => :ratings, :source => :film end class用户:分级,:来源=>:电影 结束 和电影 class Film < ActiveRecord::Base has_many :users, :through => :rat

我有一个模型用户

class User < ActiveRecord::Base  
  has_many :ratings  
  has_many :rated_films, :through => :ratings, :source => :film  
end  
class用户:分级,:来源=>:电影
结束
和电影

class Film < ActiveRecord::Base  
  has_many :users, :through => :ratings  
end  
class-Film:评级
结束
我希望找到所有未被指定用户评级的电影,如smth

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)  
class-Film:评级
命名的作用域:不是由用户,lambda{124; user |评级的
{:joins=>:users,:conditions=>['?不在用户中,用户]}
}  
结束
胶片。未按用户分级(用户优先)
我对SQL不太熟悉,因此不太确定这是否可以在命名范围内实现

非常感谢


Yuriy

我想您有一个
评级
表,这是您的
联接
表。对吗?所以你需要一些类似的东西:

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)=>[]而且你肯定有
Film
这个
用户
没有评分,对吧?是的,
user.first.rated_films.count=>100
Film.count=>4359
不幸的是没有,即使在lamda
user=>user\u id
最初发布很久之后,我就修复了一个打字错误,但这里有一个答案可能会有所帮助:
Film.not_rated_by_user(User.first.id)