【问题标题】:How to create a daterange in PostgreSQL using Rails如何使用 Rails 在 PostgreSQL 中创建日期范围
【发布时间】:2012-09-11 22:05:49
【问题描述】:

我正在使用 Rails 3.2.7 和 Postgres 9.2 尝试创建日期范围

这就是我的创作方式

schedule_block              = ScheduleBlock.new
schedule_block.date_range   = [Date.new, Date.new]
schedule_block.save

这是结果查询和错误:

INSERT INTO "schedule_blocks" ("date_range") VALUES ($1) RETURNING "id"  [["date_range", [Mon, 01 Jan -4712, Mon, 01 Jan -4712]]]
PG::Error: ERROR:  malformed range literal: "---
- -4712-01-01
- -4712-01-01
"
DETAIL:  Missing left parenthesis or bracket.
: INSERT INTO "schedule_blocks" ("date_range") VALUES ($1) RETURNING "id"
   (0.1ms)  ROLLBACK
Completed 500 Internal Server Error in 496ms

我怎样才能做到这一点?

【问题讨论】:

  • 很好的问题,就是来问这个的。您在迁移中使用了什么?
  • add_column :table_name, :col_name, :daterange
  • psql 是 PostgreSQL 的命令行客户端,有自己的标签。不要将它与 PostgreSQL(或简称 Postgres)混淆。我修好了。
  • Rails 不知道 daterange 是什么的问题?就像它不知道间隔是什么一样。因此,您不需要适当地转换为字符串吗?查看错误是什么,看起来它只是将您的日期数组转储到 sql... 这显然是无效的。

标签: ruby-on-rails ruby-on-rails-3 postgresql postgresql-9.2 range-types


【解决方案1】:

如果此拉取请求将被合并,将在 rails 4 中可用 - https://github.com/rails/rails/pull/7345

【讨论】:

  • 为了省去深入了解范围的拉取请求是否被合并的麻烦,它是。您可以在 simontaranto.com/2013/12/31/… 阅读有关使用范围(和一些陷阱)的信息
猜你喜欢
  • 2014-10-29
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多