如何运行原始sql查询并返回ActiveRecord_Relation
实例?
在sqlite3 db和Rails 4.2上,ActiveRecords::Base.exec_query(sql)
返回ActiveRecord_Result
个实例。 ActiveRecords::Base.execute(sql)
返回一个数组。这很麻烦,因为我无法对返回的对象运行后续的“ActiveRecord查询”或原始sql查询。
更一般地说,我想知道如何在Rails中链接“复杂”的SQL查询。复杂意味着我无法通过ActiveRecords提供的“ORM方法”找到方法。并且通过链接我的意思是我想在几个SQL查询中将其分解,这是出于性能原因。示例:我只想运行一次重大的第一个SQL查询,存储结果,然后根据用户行为运行较轻的SQL查询。
我目前正在尝试通过服务器端处理实现的dataTables来优化数据库可视化。每次用户与表交互时,服务器都必须运行不必要的复杂SQL查询,因为我无法在更简单的查询中将其分解。我查看了以下问题,但无法找到令人满意的解决方案:
答案 0 :(得分:0)
这是一种从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