Rails 时间范围格式问题

ZhouYiYu · 2017年09月13日 · 最后由 pinewong 回复于 2017年09月15日 · 1747 次阅读

我用 js 把想传给 rails 后台的时间范围改成这种格式:

然后在 params 中其格式是这样:

我用 where 查询,然后有报错,我看了下错应该是格式引起的:

我想问有没有办法让传过来的参数到数据库查询的时候格式是: "时间".."时间"
我这里是想用 rails-simple-search 这个包去搜索东西,所以我想直接将一个日期范围传给 search,想问 rails-simple-search 能接受参数为范围的值吗

where(created_at: '2017-09-12'.to_date..'2017-09-12'.to_date)

😂

你可以将两个时间拆分成两个参数传

var renovation_date_start = "2017-09-12";
var renovation_date_end = "2017-09-13";

rails 接受 params

# 字符串转日期
renovation_date_start = params[:renovation_date_start].to_date
renovation_date_end = params[:renovation_date_end].to_date

# 生成日期区间
renovation_date = renovation_date_start  .. renovation_date_end 

# 使用
Customers.where(renovation_date: renovation_date)

或者楼主可以使用 sql between

mapana 回复

我没把我的需求描述清楚,已经更改。 这是我在用 rails-simple-search 时遇到的问题,我想将一个日期范围直接传给 simple-search,请问 simple-seach 支持这种用法吗?

我有一个想法,但不一定是好的方法
就像我上一个回答那样,你的时间区间不一定要在 view 形成
你的 view 需要显示两个时间,最好做成两个参数,如 start_at end_at,这样你可以做默认值
后台接收 params 改造一下,在使用 params[:search] 之前,加一个 params[:search][:renovation_date]

params[:search][:renovation_date] = params[:search][:start_at].to_date .. params[:search][:end_at].to_date
# 如果查询时不需要start_at和end_at的存在,可以进行delete。

rails-simple-search 能实现这个需求,是分两个参数传入的,具体请过一遍 gem 的文档就知道了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号