在活动记录栏中融合两个查询

时间:2016-11-06 17:21:57

标签: sql ruby-on-rails activerecord

如何在Rails 5中合并这两个查询?

Event
.where(starts_at: date.beginning_of_day..date.end_of_day)
.where(kind: "opening")

Event.where("cast(strftime('%w', starts_at) as int) = ?", date.wday)
.where(kind: "opening")
.where(weekly_recurring: true)

我需要在一个查询中获取所有这些事件以提高性能。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

如果您想要合并结果

Event.where(starts_at: date.beginning_of_day..date.end_of_day).where(kind: "opening").where("cast(strftime('%w', starts_at) as int) = ?", date.wday).where(kind: "opening").where(weekly_recurring: true)

如果你想在一个查询中有两个单独的结果,我不认为活动记录有这样的方法。

答案 1 :(得分:0)

我总是更容易编写复杂的查询,例如SQL中直接需要的查询;你写的比写入ActiveRecord更快。

在你的情况下,我会做这样的事情:

query = "starts_at between #{date.beginning_of_day} and #{date.end_of_day} 
and kind = 'opening'
and weekly_recurring = true
and cast(strftime('%w', starts_at) as int) = #{date.wday}"

Event.where(query)

我发现这种方法更容易,也更容易管理。