1

ユーザーが好みの日付/時刻形式を設定するアプリケーションがあります。ユーザーはdatetime、アプリケーション全体で構成された形式で入力する必要があります。ここで問題となるのは、いくつかの形式で、datetimeが誤って解析されることcreate/update ActiveRecordです。

たとえば、ユーザーはで日付/時刻の形式を設定しましたhh:mm dd/MM/yyyy。これで、ユーザーが入力すると、本来あるべき場所17:00 04/05/2012として解析されます5 PM 5 Apr, 20125 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前にそれを操作することを計画しています。だから手順はparamsActiveRecord

  1. 地図datetimeから読むparams
  2. ユーザーの好みの日時形式で解析します
  3. datetimeで使用されるデフォルトの形式にフォーマットしますActiveRecord
  4. 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

誰かがそれが正しいアプローチであるかどうかを確認していただけますか?誰かがこれを達成するためのより良い方法を提案するならば、私は感謝するでしょう。

ありがとう、アミット・パテル

4

1 に答える 1

0

私は私が言及したアプローチで行きます。誰かがより良い方法を持っているなら、共有し続けてください。

ありがとう、アミット・パテル

于 2012-04-19T07:37:42.250 に答える