【发布时间】:2016-02-27 16:35:28
【问题描述】:
所以,我有三个模型:
class Restaurant < ActiveRecord::Base
has_many :reviews
has_many :users, through: :reviews
end
class Review < ActiveRecord::Base
belongs_to :restaurant
belongs_to :user
end
class User < ActiveRecord::Base
has_many :reviews
has_many :restaurants, through: :reviews
end
现在,如果我想列出@user 评论过的所有餐厅,我只需要:
Restaurant.joins(:reviews).where("reviews.user_id": @user.id)
很好。但是,如果我想列出所有未被@user 评论过的餐厅怎么办? 我试过这个:
Restaurant.joins(:reviews).where.not(“reviews.user_id": @user.id)
很遗憾,这不起作用,因为它还会返回由@user 评论过的那些已经被其他用户评论过的餐厅!
我想出了这个可怕而昂贵的黑客:
Restaurant.joins(:reviews).reject {|x| x.users.where(id: @user.id).present? }
我相信一定有更好的方法。帮助!
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-5