如何在 Rails 中链接原始 SQL 查询或如何从 Rails 中的原始 SQL 查询链接 return 一个 ActiveRecord_Relation?

How to chain raw SQL queries in Rails OR how to return an ActiveRecord_Relation from a raw SQL query in Rails?

如何 运行 原始 sql 查询并返回 ActiveRecord_Relation 实例?

在 sqlite3 数据库和 Rails 4.2 上,ActiveRecords::Base.exec_query(sql) returns 一个 ActiveRecord_Result 实例。 ActiveRecords::Base.execute(sql) returns 一个数组。这很麻烦,因为我无法 运行 后续 "ActiveRecord queries" 或原始 sql 查询返回的对象。

更一般地说,我想知道如何在 Rails 中链接 "complex" sql 查询。我所说的复杂是指我无法通过 ActiveRecords 给出的 "ORM methods" 找到一种方法。通过链接,我的意思是出于性能原因,我想将其分解为几个 SQL 查询。示例:我只是想 运行 大而重的先 SQL 查询一次,存储结果然后 运行 较轻的 sql 查询取决于用户行为。

我目前正在尝试通过 dataTables 使用服务器端处理来优化数据库可视化。每次用户与 table 交互时,服务器都必须 运行 一个不必要的复杂 SQL 查询,因为我无法将其分解为更简单的查询。我查看了以下问题,但无法找到令人满意的解决方案:

Rails raw SQL example

Convert Array#select to active record query in rails 4

这是从 raw_sql 获取 ActiveRecord_Relation 的方法。
如果您确实有一个模型与您尝试检索的字段相匹配,那么它的效果最好,但是正如您在 test_attribute 中看到的那样,任何数据都将被加载。

# Just an example query, any query should be ok
query = <<-SQL
  SELECT *, TRUE AS test_attribute
  FROM users
  WHERE sign_in_count < 10
SQL
relation = User.select('*').from("(#{query}) AS users")

relation.class
# User::ActiveRecord_Relation

relation.first.test_attribute
# true