ruby-on-rails - 以正确的方式从 ruby​​ on rails 执行查询

标签 ruby-on-rails ruby

我刚开始使用 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/

相关文章:

ruby-on-rails - rails : is Passenger Standalone suitable for production deployment?

ruby-on-rails - 测试多个变量是否小于一个值的 Ruby 方法

ruby-on-rails - div_for : NoMethodError

ruby-on-rails - 无法停止本地主机 :3000 redirecting to https

ruby-on-rails - 在 PostgreSQL 中使用 Sequel gem 插入数组

css - Rails ERB 变量不响应 CSS

javascript - Bootstrap 自定义 JavaScript 文件未加载(Rails 4)

css - Rails 7 引擎如何使未编译的样式表可用于托管应用程序?

ruby-on-rails - 为什么 '/' 可以正确匹配我的 Rails 3 应用程序中的 Rack 应用程序,但没有其他路由可以正确匹配?

ruby - 查找数组中所有最大元素