如何将GET参数从自定义日期格式转换为数据库日期格式?

时间:2014-07-25 15:29:17

标签: mysql ruby-on-rails ruby datetime activerecord

在我的index模型的Invoice视图中,我有一个users可用于按特定条件过滤invoices的表单:

<%= form_tag invoices_path, :method => 'get' do %>

    <%= text_field_tag :number, params[:number] %>

    <%= text_field_tag :after, params[:after] %>
    <%= text_field_tag :before, params[:before] %>

    <%= text_field_tag :min, params[:min] %>
    <%= text_field_tag :max, params[:max] %>

    <%= submit_tag "Search", :name => nil %>

<% end %>

class InvoicesController < ApplicationController

  def index
    @invoices = current_user.invoices.search(params)
  end

  ...

end

class Invoice < ActiveRecord::Base

  belongs_to :user

  def self.search(params)
    data = all
    data = data.number_contains(params[:number]) if params[:number]

    data = data.date_is_after(params[:after]) if params[:after]
    data = data.date_is_before(params[:before]) if params[:before]

    data = data.total_is_more_than(params[:min]) if params[:min]
    data = data.total_is_less_than(params[:max]) if params[:max]

    data
  end

  def self.date_is_after(date)    
    where("date >= ?", date)
  end

  def self.date_is_before(date)    
    where("date <= ?", date)
  end

  ...

end

问题是,要按日期过滤发票,用户必须以数据库使用的格式输入afterbefore参数,即YYYY-MM-DD对用户来说非常麻烦。

如何让用户可以按照date_format记录的date_format列中指定的首选preferences进行搜索,例如%d.%m.%Y%m/%d/%Y

如果搜索表单接受了自定义日期格式,那将是件好事。

如何实现这一目标?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我建议您Date.parse

▶ d = Date.parse '12/08/2014'
# => #<Date: 2014-08-12 ((2456882j,0s,0n),+0s,2299161j)>
▶ d = Date.parse '12.08.2014'
# => #<Date: 2014-08-12 ((2456882j,0s,0n),+0s,2299161j)>

然后简单地说:

▶ d.to_s
# => "2014-08-12"

希望它有所帮助。