我刚开始使用 ruby on rails,我有一个关于更复杂查询的问题。到目前为止,我在查看 Rails 指南时已经完成了简单的查询,并且效果非常好。
现在我正在尝试从数据库中获取一些 ID,我会使用这些 ID 来获取真实的对象并对它们进行处理。获取这些比简单的 Object.find 方法要复杂一些。
这是我的查询的样子:
select * from quotas q, requests r
where q.id=r.quota_id
and q.status=3
and r.text is not null
and q.id in
(
select A.id from (
select max(id) as id, name
from quotas
group by name) A
)
order by q.created_at desc
limit 1000;
从 sql 管理器执行此查询时,这会给我 1000 个 ID。我想先获取id列表,然后通过id查找对象。
有没有办法通过使用此查询直接获取这些对象?避免 ID 查找?我用谷歌搜索你可以像这样执行查询:
ActiveRecord::Base.connection.execute(query);
最佳答案
假设 Quota has_many :requests
,
Quota.includes(:requests).
where(status:3).
where('requests.text is not null').
where("quotas.id in (#{subquery_string_here})").
order('quotas.created_at desc').limit(1000)
我绝不是专家,但大多数基本的 SQL 功能都包含在 ActiveRecord 中。您可能还想查看 #group
和 #pluck
方法来消除丑陋的字符串子查询。
在关系对象上调用 #to_sql
将向您显示它等效的 SQL 命令,并可能有助于您的调试。
关于ruby-on-rails - 以正确的方式从 ruby on rails 执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15019760/