2

この質問は、これと実質的に同じことを尋ねています。

一番上の答えが私にとってうまくいかないことを除いて。私は Ruby と RoR の両方に慣れていないので、一体何をしているのかわかりません。これが私がこれまでに持っているものです。

にデフォルトの日付と時刻の形式を追加しましたen.yml

en:
  date:
    formats:
      default: '%d.%m.%Y'
  time:
    formats:
      default: '%H:%M'

また、次のコードで新しい初期化子を追加しました。

Date::DATE_FORMATS[:default] = '%d.%m.%Y'
Time::DATE_FORMATS[:default] = '%H:%M'

Railsコンソールに移動して実行Time.now.to_sするDate.today.to_sと、正しい結果が得られます。これらは、データベースからフェッチされ、モデルのインデックス ページなどに表示されたときにも正しく表示されます。

しかし、いくつかの日付と時刻のフィールド (datetime ではありません!) を含むフォームを作成しようとすると、YYYY-MM-DD日付には古き良きものが、時間には全体YYYY-MM-DD HH:mm:ss.nnnnnnが古くなっています。

これらの入力値を正しくフォーマットするためのベストプラクティスは何ですか? ビュー内の変更を避けたい (ここで行われているように)、可能であれば、アプリケーション レベルでこれを適切に解決したいと考えています。

4

1 に答える 1

3

これは私がやったことです:

まず、モデルにカスタム フィールドを定義しました。

  attr_accessible :entry_date_formatted

  def entry_date_formatted
    self.entry_date.strftime '%d.%m.%Y' unless self.entry_date.nil?
  end

  def entry_date_formatted=(value)
    return if value.nil? or value.blank?
    self.entry_date = DateTime.strptime(value, '%d.%m.%Y').to_date
  end

次に、フォームを からentry_dateに変更しましたentry_date_formatted

<%= form.text_field :entry_date_formatted, :placeholder => 'Date' %>

最後になりましたが、関連するフィールドをロケール ファイルに追加しました。

en:
  activerecord:
    attributes:
      time_entry:
        entry_date_formatted: Entry date
        start_time_formatted: Start time
        end_time_formatted: End time

これはおそらく最善の方法ではありませんが、今のところはうまく機能しています。

于 2012-09-01T13:41:16.163 に答える