【发布时间】:2014-04-26 00:42:16
【问题描述】:
我正在尝试从 ActiveRecord 模型中查询,我们称之为user:
- 用户
has_many :projects - 项目
has_one :thing - 用户
has_many :things, through: :projects
我有兴趣找到所有具有things 的completed 或根本没有things 的projects。
一些尝试:
projects.includes(:thing).where(
things: { status: :complete }
).or(
things: { id: nil }
)
或
projects.includes(:thing).where(
things: [
{ status: :complete },
{ id: nil }
]
)
如果可能的话,我宁愿在没有 SQL 的情况下完成此任务,即使它是这样的:
query = projects.includes(:thing)
query.where(things: {id: nil}) & query.where(things: {status: :complete})
【问题讨论】:
-
实际上,我想在结果中添加一个
.order(:start_date),所以我不能使用&,因为这将返回一个数组,而不是一个活动记录关系。任何人都可以进行这个查询吗? -
我很想看看是否有办法通过部分 sql 查询来做到这一点。但仍然让 activerecord 来处理“包含”。
-
如果您唯一的问题是订购,您可以先订购,然后映射。像 projects.order(:start_date).map 等等
标签: ruby-on-rails activerecord ruby-on-rails-4 rails-activerecord