如何在pg / Rails

时间:2017-08-04 03:19:47

标签: ruby-on-rails ruby postgresql pg

所以我有这个名为SeasonRate的表

create_table "season_rates", force: :cascade do |t|
  t.string   "title"
  t.datetime "from_date"
  t.datetime "to_date"
  t.float    "rate"
  t.integer  "property_type_id"
  t.datetime "created_at",       null: false
  t.datetime "updated_at",       null: false
  t.index ["property_type_id"], name: "index_season_rates_on_property_type_id", using: :btree
end

我希望能够找到今天的日期落在from_dateto_date之间的行,忽略年份。到目前为止,使用this我已经能够编写此代码

def todays_rate(apartment)
  property_type = apartment.property_type_id
  @rate = SeasonRate.where(property_type_id: property_type)
  @todays_rate = @rate.where("extract (DOY FROM TIMESTAMP from_date) <= extract (DOY FROM TIMESTAMP ?) AND extract (DOY FROM TIMESTAMP to_date) >= extract (DOY FROM TIMESTAMP ?)",Date.today, Date.today)
end

但它给我错误说

  

PG :: SyntaxError:ERROR:“from_date”或附近的语法错误       第1行:... ty_type_id“= $ 1 AND(提取(DOY来自TIMESTAMP from_date)...                                                                ^       :SELECT“season_rates”。* FROM“season_rates”WHERE“season_rates”。“property_type_id”= $ 1 AND(提取(DOY FROM)   TIMESTAMP from_date)&lt; =提取(DOY来自TIMESTAMP'2017-08-04')和   提取物(DOY FROM TIMESTAMP to_date)&gt; =提取物(DOY来自TIMESTAMP   '2017年8月4日'))

我已经搜索了这个问题很多,但我找不到任何解决方案。请帮助我在这里做错了什么,或者如果你有更好的解决方案来解决这个问题,那就太好了。非常感谢你。

1 个答案:

答案 0 :(得分:1)

我可能是错的,但看起来添加TIMESTAMP告诉Postgres将字符串转换为时间戳,然后你不给它一个字符串,你给它一个列名,因此语法错误:

select EXTRACT(DOY FROM TIMESTAMP created_at), created_at from users;
ERROR:  syntax error at or near "created_at"
LINE 1: select EXTRACT(DOY FROM TIMESTAMP created_at), created_at fr...

但你可以给它列名而不是要转换的字符串,它似乎工作正常

select EXTRACT(DOY FROM created_at), created_at from users;
date_part |         created_at
-----------+----------------------------
       190 | 2017-07-09 21:07:41.746157