sql - 结合 HABTM 的作用域和 belongs_to 与 OR 的关联

标签 sql ruby-on-rails postgresql activerecord rails-activerecord

我有以下模型:

class User < ApplicationRecord
  has_and_belongs_to_many :lists
end
class Workspace < ApplicationRecord
  has_many :lists, dependent: :nullify
end
class List < ApplicationRecord
  has_and_belongs_to_many :users
  belongs_to :workspace, optional: true

  scope :by_workspace, ->(workspace) { where(workspace: workspace) }
  scope :by_user, ->(user) { joins(:users).where(users: { id: user }) }
end

我需要的是一个 by_workspace_or_user 范围,它返回属于给定工作区或给定用户的任何列表。我试过使用 组合这些,但没有成功。

最佳答案

您可以使用纯 SQL where 来实现此目的:

List
  .left_outer_joins(:users)
  .where("users.id = ? OR lists.workspace_id = ?", user.id, workspace.id)

关于sql - 结合 HABTM 的作用域和 belongs_to 与 OR 的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56753070/

相关文章:

mysql - 查找常见的匹配 ID

sql - 使用另一列作为键添加值列

mysql - Ruby on Rails - Mysql2::错误:无法连接到 'localhost' 上的 MySQL 服务器 (10061)

python - 在 plpgsql (postgresql) 或 python 类中创建函数哪个更好?

mysql - 如何使用 sql 查询设置结果集行数

c# - 在通过 C# 调用的动态查询中转义 '@' 符号

ruby-on-rails - Rails rake 并行化阈值和注意事项

jquery - 如何使用 jQuery 制作交互式 map ?

postgresql - 如何安全地将 RAID 0 EBS 转换为 AWS 中的单个 EBS?

sql - 如何根据表的存在用sql复制表模式?