将 SQL 查询转换为 ActiveRecord 查询

Convert SQL query to ActiveRecord Query

我有一个 SQL 查询,我在 SQLite 数据库上 运行ning。检索星期六和星期日上午 7 点到下午 6 点之间日期范围内的记录效果很好。

当我 运行 查询时,它 returns 一个哈希数组。我想将它转换为 ActiveRecord 查询,这样它 returns 一个我可以更轻松地操作的对象数组。

ActiveRecord::Base.connection.execute("select * from reports where datetime between '2015-03-25' and '2015-04-12' and strftime('%w', datetime) IN ('0','6') and strftime('%H', datetime) >= '07' and strftime('%H:%M', datetime) </pre>

<p>我已经查看了 <a href="http://guides.rubyonrails.org/active_record_querying.html" rel="nofollow">docs</a> 并且不确定如何解决这个问题,非常感谢任何帮助!</p>

<p><strong>更新:</strong>
与此非常接近:</p>

<pre>Report.where("datetime >= ? AND datetime <= ?", '2015-03-25 21:15:00', '2015-04-27 07:56:00').where("cast(strftime('%H', datetime) as int) >= ? AND cast(strftime('%H', datetime) as int) <= ?", 07,17).where("cast(strftime('%w', datetime) as int) = ?", 0)

还需要在最后一个where子句中偷偷加上1(除了0)的选项。我猜它也可以被清理干净。仍然开放输入!

对于这个复杂的SQL查询字符串,我认为你应该使用find_by_sql of ActiveRecord。此处记录:http://api.rubyonrails.org/classes/ActiveRecord/Querying.html#method-i-find_by_sql.

Report.find_by_sql("select * from reports where datetime between '2015-03-25' and '2015-04-12' and strftime('%w', datetime) IN ('0','6') and strftime('%H', datetime) >= '07' and strftime('%H:%M', datetime)