【发布时间】:2020-02-14 09:55:53
【问题描述】:
我有一个方法可以检查我的模型实例的日期交叉点。
def intersections
Reservation.where("daterange && ?", self.daterange)
end
假设我有预订r = Reservation.last
=> #<Reservation id: 3, home_id: 1, daterange: Sun, 10 Feb 2020...Fri, 21 Feb 2020>
r.intersections
异常查询:
SELECT "reservations".* FROM "reservations" WHERE (daterange && '[2020-02-10,2020-02-21)')
实际查询:
SELECT "reservations".* FROM "reservations" WHERE (daterange && '2020-02-10','2020-02-11','2020-02-12','2020-02-13','2020-02-14','2020-02-15','2020-02-16','2020-02-17','2020-02-18','2020-02-19','2020-02-20')
架构:
create_table "reservations", force: :cascade do |t|
...
t.daterange "daterange"
end
我尝试了很多变体,但似乎演员隐藏在 Active Record 深处的某个地方。我可以为这个查询关闭它吗?
【问题讨论】:
-
@max AR 在查询中加上引号,所以它失败了。然而 AR::Attributes 工作得很好。我根据guide在模型中添加了
attribute :daterange, range: true。谢谢! Сan你添加这个答案,我会标记它接受?
标签: ruby-on-rails postgresql activerecord