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

问题描述 投票:1回答:2

如何在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)

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

谢谢您的帮助

sql ruby-on-rails activerecord
2个回答
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)

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


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)

我发现这种方法更容易,更易于维护。

© www.soinside.com 2019 - 2024. All rights reserved.