2012-05-02 13 views
5

私は毎週のカレンダービューを持っており、開始日の/:年/:月/:日を受け入れるように設定されています。Railsの日付のルート

match "events/(:year/:month/:day)" => "events#index", 
     :constraints => { :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/ }, 
     :as => "events_date" 

このルートの使用に関する2つの質問があります。

unless params[:year].nil? || params[:month].nil? || params[:day].nil? 
    start_date = Date.new(params[:year].to_i, params[:month].to_i, params[:day].to_i) 
end 
start_date = start_date.nil? ? Date.today : start_date 

をこれはかなり冗長で一種の醜いとして私を打つ:のparamsを解析する際にまず、これは私がやっているものです。より良い方法がありますか?

そして(週にページング週間)カレンダー内の別の週へのリンクを作り、私はまた、一種の冗長と醜いようだ

#assume an date object with the desired start date 
link_to events_date_path(date.strftime('%Y'), date.strftime('%m'), date.strftime('%d')) 

ような何かを持っています。ルート内の日付を扱う最良の方法は何ですか?

+0

人間が読めるようにする必要がある理由はありますか?それはマッチ "events /(:date)"として設定するのが理にかなっていますか?dateは "2012-05-01"のようになり、実際の日付オブジェクトに直接strftimeすることができますか? –

+0

いいえ、これは完全に個人的なプロジェクトです。これは実際の問題と同じくらいプログラミングの練習です – DVG

+0

私は実際の答えのフィールドに私の答えを取ると思います。 ;) –

答えて

8

私の提案は、3つの別々の変数を使用しないことです。そうすれば、コントローラでヌルチェックとサニティチェックを余儀なくされることはありません。したがって、あなたがコントローラでもう少しまともなものに終わるだろう

match "events/(:date)" => "events#index", 
     :constraints => { :date => /\d{4}-\d{2}-\d{2}/ }, 
     :as => "events_date" 

:あなたはまだタクトであなたの制約で、次のようになり、何かにであなたの試合を回すことができる

unless params[:date] 
    start_date = params[:date].strftime("%Y-%m-%d').to_date # assuming you want a Date 
end 

そしてI 「これが設定されている場合は、」より、このような何かをチェックするの私はそれを見つけるために、通常、これらの種類を行うより読みビット:あなたも一緒に、これらの最後の二つのロールができ

start_date = Date.today unless defined? start_date 

start_date = defined?(params[:date]) ? params[:date].strftime("%Y-%m-%d').to_date : Date.today 
+0

この構文を使用して日付に直接行くこともできます:Date.strptime(params [:date]、 '%Y-%m-%d') –

+0

ポイント、パーツを別々の変数に分割することなく、パラメ – DVG

+0

私は肯定的ではありません。私の推測ははいですが、多少あいまいなので推薦しません。あなたのルートには「events /(:date)」と表示され、「events/2012/05/01」を受け取っています。私の心にはちょっと汚いと感じます。ルートで分かれているはずですから。 –