ruby-on-rails - Where NOT IN () on a join?

标签 ruby-on-rails ruby ruby-on-rails-3 activerecord

我在 Rails 模型中有以下范围。

class Suggestion < ActiveRecord::Base
  has_many :favourites

  def self.favoured_by(user)
    joins(:favourites).where(favourites: { user_id: user.id })
  end
end

这很完美。它将返回特定用户收藏的所有建议。

我如何检索所有根本不喜欢或喜欢但不被该特定用户喜欢的所有建议?

def self.not_favoured_by(user)
  # ...
end

我的最喜欢的模型是这样的:

class Favourite < ActiveRecord::Base
  belongs_to :suggestion
  belongs_to :user
end

最佳答案

favorited_suggestions_ids = joins(:favourites).where(favourites: { user_id: user.id }).map(&:id)
return scoped if favorited_suggestion_ids.empty?
where('id not in (?)',favorited_suggestions_ids)

关于ruby-on-rails - Where NOT IN () on a join?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377975/

相关文章:

mysql - ActiveRecord3 死锁重试

ruby-on-rails-3 - 如何为rails-settings gem 制作设置配置页面?

ruby-on-rails-3 - 如何通过 has_many through 关联建立 has_one through 关联?

ruby-on-rails - 在公共(public)属性上连接两个 ActiveRecord 关联

ruby - 理解递归回溯算法的 Ruby 实现

mysql - 使用搜索逻辑的日期条件

ruby-on-rails - rails 4 -- 闪光通知

ruby - 我如何使用 page-object-gem 和 jqueryui_widgets 选择日期选择器

ruby-on-rails - 在 has_many 关系上应用条件

ruby-on-rails - Rails - 以可移植的方式创建临时文件