2014-07-25 61 views
0

index視圖我Invoice模型的我有users可以使用一定的標準來過濾invoices一種形式:如何將GET參數從自定義日期格式轉換爲數據庫日期格式?

<%= 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中進行搜索,如在preferences記錄的date_format列中指定的那樣,例如, %d.%m.%Y%m/%d/%Y

如果該自定義日期格式被搜索表單接受,那將會很好。

這是如何實現的?

感謝您的任何幫助。

+0

最簡單的方法是使用日期選擇器類型組件。然後你總是得到正確的格式。更簡單但更笨重的替代方法是在日,月和年使用組合框。 – Jaydee

回答

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" 

希望它能幫助。

+0

感謝您的幫助。 – Tintin81

相關問題