在我的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
问题是,要按日期过滤发票,用户必须以数据库使用的格式输入after
和before
参数,即YYYY-MM-DD
对用户来说非常麻烦。
如何让用户可以按照date_format
记录的date_format
列中指定的首选preferences
进行搜索,例如%d.%m.%Y
或%m/%d/%Y
?
如果搜索表单接受了自定义日期格式,那将是件好事。
如何实现这一目标?
感谢您的帮助。
答案 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"
希望它有所帮助。