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
不幸的是没有,即使在lamdauser=>user\u id
最初发布很久之后,我就修复了一个打字错误,但这里有一个答案可能会有所帮助:
Film.not_rated_by_user(User.first.id)