我目前正在学习如何使用带有The Odin Project的Ruby on Rails,现在我正在处理制作表单。我试图从我的数据库中提取唯一日期以填充项目的下拉选项框。我在我的视图中使用form_for
并使用select
函数,该函数采用数组数组,即[["选项1",1],[&# 34;选项二",2]]等。这个想法是只有数据库中的唯一日期才会显示在选项中。我的问题是重复日期不断出现,例如。
03/03/2016
03/03/2016
04/03/2016
05/03/2016
06/03/2016
06/03/2016
使用find_by_sql我试过
SELECT DISTINCT start FROM flights
无济于事。快速谷歌搜索后我尝试了
SELECT start FROM flights GROUP BY start
但我仍然有重复。我对SQL不是最好的,所以任何帮助都会受到赞赏。
编辑:
我的datatime列确实有一个时间组件,因此可能是问题
如果有任何帮助,请从db模式下面找到我的航班表
create_table "flights", force: :cascade do |t|
t.integer "from_airport_id"
t.integer "to_airport_id"
t.datetime "start"
t.integer "flight_duration"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
答案 0 :(得分:0)
如果选择不同的日期仍然是重复日期,则日期格式很可能有时间,日期的时间也不同。
您应该将列开始日期CAST(start AS DATE)
转换为将列转换为日期,然后才使用group by。
答案 1 :(得分:0)
经过一些在线搜索后,我发现了一种更容易获得我想要的结果的方法。使用:pluck
方法作为快捷方式从数据库中提取我想要的属性,在日期时间调用:to_date
以删除时间组件,然后调用:uniq
以获得唯一像我要求的日期。
Flight.pluck(:start).map {|a| [a.strftime("%d/%m/%Y"), a.to_date]}.uniq