【发布时间】:2014-06-20 08:46:03
【问题描述】:
我想知道在数据库中查找行时是否可以强制 Rails 将范围转换为 postgres 范围 我的数据库中有一个日期范围列类型的表
create_table "events", force: true do |t|
......
t.daterange "date"
end
当我插入新行时,Rails 知道如何转换范围 例如
Event.create date: Date.today..Date.tomorrow
按预期工作,我在“事件”表中得到一个新行,日期值等于“[2014-07-16,2014-07-17)”
但是当我尝试使用 to_formatted(:db) 方法从 db Rails 强制转换范围中选择行时 所以
range = Date.today..Date.tomorrow
Event.find_by date:range
变成
SELECT "events".* FROM "events" WHERE ("events"."date" BETWEEN 2014-07-16 AND 2014-07-17) LIMIT 1
而我期望得到的是
SELECT "events".* FROM "events" WHERE ("events"."date" [2014-07-16, 2014-07-17) LIMIT 1
我通过向 RANGE_FORMATS 添加新的格式化程序扩展了核心 Range 类
现在使用
Event.find_by date:range.to_s(:pg)
有没有更有效的方法解决问题?
【问题讨论】:
标签: ruby-on-rails postgresql range