【问题标题】:Ruby on rails. bad value for range红宝石在铁轨上。范围的坏值
【发布时间】:2016-01-07 01:28:47
【问题描述】:

我正在尝试将日期变量从表单传递到方法,以根据数据库中的 created_at 字段导出信息。但是,当我从表单中发送日期格式值时,我收到“范围值错误”错误。我认为这是因为可变日期格式和数据库中的格式不匹配。任何想法如何解决这个问题?

这是我用简单表单创建的 .haml 表单:

= simple_form_for :download, { url: download_exports_path('xlsx') } do |f|
  = f.input :date, as: :date, html5: true
  = f.button :submit, "Export"

这是我在控制器中的下载方法:

   def download
      current_time = Time.now
      date = params[:date]
      @addresses = Address::where(created_at: date..DateTime.now.end_of_day)
        respond_to do |format|
          format.xlsx {render xlsx: 'download',filename: "addresses.xlsx"}
        end
   end

这是我得到错误的地方:

有什么办法解决这个问题吗?

【问题讨论】:

    标签: ruby-on-rails ruby haml simple-form


    【解决方案1】:

    where 子句应以点开头,并且您可能应该使用 to_datetime 将日期参数转换为正确的格式。

    def download
      current_time = Time.now
      date = params[:download][:date].to_datetime
      @addresses = Address.where(created_at: date..DateTime.now.end_of_day)
        respond_to do |format|
          format.xlsx {render xlsx: 'download',filename: "addresses.xlsx"}
        end
    end
    

    【讨论】:

    • 它说 nil:NilClass 的未定义方法 `to_datetime' 如果我确实像你所说的那样使用 .to_datetime
    • 这是因为params[:date] 为零。如果我正确地看到您的请求参数,它可能应该是 params[:download][:date]
    【解决方案2】:

    您的 date 局部变量不是 DateTime,只是一个字符串。您正在尝试创建一个两端具有不同类型的范围,这是不允许的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-13
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 2017-03-26
      相关资源
      最近更新 更多