ユーザーが好みの日付/時刻形式を設定するアプリケーションがあります。ユーザーはdatetime
、アプリケーション全体で構成された形式で入力する必要があります。ここで問題となるのは、いくつかの形式で、datetime
が誤って解析されることcreate/update
ActiveRecord
です。
たとえば、ユーザーはで日付/時刻の形式を設定しましたhh:mm dd/MM/yyyy
。これで、ユーザーが入力すると、本来あるべき場所17:00 04/05/2012
として解析されます5 PM 5 Apr, 2012
5 PM 4 May, 2012
1.8.7 :004 > a = Article.create!(:name => 'a1', :published_at => '17:00 04/05/2012')
=> #<Article id: 2, name: "a1", published_at: "2012-04-05 17:00:00", created_at: "2012-04-16 13:54:36", updated_at: "2012-04-16 13:54:36">
ruby / railsには、日付/時刻文字列が評価される形式の定義済みセットがあり、任意の形式に順番に一致する場合は、指定された文字列をその形式で解析することを理解しています。
もう一つの例
1.8.7 :006 > a = Article.create!(:name => 'a1', :published_at => '17:00 15/12/2012')
=> #<Article id: 4, name: "a1", published_at: nil, created_at: "2012-04-16 13:55:43", updated_at: "2012-04-16 13:55:43">
ここにユーザーが入力し15 December, 2012
、解析されましたnil
誰かがこことruby-forumですでに同様の質問をしましたが、各ユーザーが自分の好みの日時形式を持っているため、アプリケーション全体で単一の日時形式を構成できないため、このソリューションは私の場合には適用できません。
現在、複数の形式で作業するために、がに渡されるdatetime
前にそれを操作することを計画しています。だから手順はparams
ActiveRecord
- 地図
datetime
から読むparams
- ユーザーの好みの日時形式で解析します
datetime
で使用されるデフォルトの形式にフォーマットしますActiveRecord
datetime
現在のparams
入力を再フォーマットされた日時に置き換えます
これがコントローラーのスニペットです
class ArticlesController < ApplicationController
before_filter :format_date_time, :only => [:create, :update]
...
...
private
def format_date_time
datetime = params[:datetime]
params[:datetime] = DateTime.strptime(datetime, pref_date_time_format).strftime('%c')
end
end
誰かがそれが正しいアプローチであるかどうかを確認していただけますか?誰かがこれを達成するためのより良い方法を提案するならば、私は感謝するでしょう。
ありがとう、アミット・パテル