Ruby on Rails未定义的方法' to_datetime'

时间:2015-11-10 23:50:17

标签: ruby-on-rails ruby

我尝试将View中的值与来自DB的created_at进行比较,但我遇到了这个问题"未定义的方法`to_datetime' for {" year" =>" 2015"," month" =>" 11"," day" =>" 7"}:ActionController的::参数" 的。我没有想法。

控制器:

def data_search
    @SDB=[]
    startt=params[:start_date].to_datetime
    endt=params[:end_date].to_datetime
    Offer.where(created_at: [startt..endt]).each do |f|
        @SDB.push(f)
    end
end

来自search.html.erb的细分:

        <%= select_date Date.today, :prefix => :start_date %> 
        <%= select_date Date.today, :prefix => :end_date%> 

没有&#39; to_datetime&#39;我有范围错误值

2 个答案:

答案 0 :(得分:0)

to_datetime是一个关于字符串的方法,因为你似乎有一些哈希表。

需要其他形式的转换。就像是 DateTime.new(params[:start_date]["year"], params[:start_date]["month"], params[:start_date]["day"])可能会有效,尽管我建议使用单独的函数将params散列转换为DateTime(基本上将原始代码包装在更清晰的函数中)。

答案 1 :(得分:0)

从您的视图生成的参数是一个哈希,其中包含“年”,“月”,“日”。您需要先将其转换为“2015-11-07”之类的字符串,然后调用to_datetime以获取日期时间值。我在我的一个项目中更改了一些代码以适合您的变量:

start_date = parames[:start_date][:year] + '-' + parames[:start_date][:month] + '-' + parames[:start_date][:day]
startt = start_date.to_datetime