2011-11-12 14 views
4

は次のように表示します。のRails 3.1 text_fieldのフォームヘルパーとjQuery DatePickerの日付形式

<%= f.text_field :date, :class => "datepicker" %> 

javascript関数はjQueryUIの日付ピッカーにそのクラスのすべての入力フィールドを変換します。

$(".datepicker").datepicker({ 
       dateFormat : "dd MM yy", 
       buttonImageOnly : true, 
       buttonImage : "<%= asset_path('iconDatePicker.gif') %>", 
       showOn : "both", 
       changeMonth : true, 
       changeYear : true, 
       yearRange : "c-20:c+5" 
      }) 

これまでのところとても良いです。私はレコードを編集することができ、それはDBに正確に日付を永続させます。私の問題は、レコードを再度編集したいときです。フォームがレコードから事前入力されると、 'yyyy-mm-dd'形式で表示されます。 javascriptは、datepickerコントロールで選択された日付のみをフォーマットします。データベースから取得した日付をフォーマットする方法はありますか?どの段階でこれを行うことができますか?

おかげで、 ダニー。

以下の説明でさらに詳しく説明すると、私のフォームはビューと部分的な2つのファイルにまたがって広がっています。ここでビューです:

<%= form_tag("/shows/update_individual", :method => "put") do %> 
    <% for show in @shows %> 
     <%= fields_for "shows[]", show do |f| %> 
      <%= render "fields", :f => f %> 
     <% end %> 
    <% end %> 
    <%= submit_tag "Submit"%> 
<% end %> 

そして、ここでは_fields部分図です:

<p> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
</p> 

<p> 
    <%= f.date %> 
    <%= f.label :date %> 
    <%= f.text_field :date, :class => "datepicker" %> 
</p> 

コントローラーコード:

def edit_individual 
    @shows = Show.find(params[:show_ids]) 
    end 

私はenvironment.rbに次のように追加しました:

Date::DATE_FORMATS.merge!(
    :default => "%d %B %Y" 
) 

ビューで@ show.dateを使用すると適切な形式が表示されますが、フォームヘルパーはまだ未加工形式を表示しています。

答えて

1

解決しよう:上記Jayendraによって示唆されるように、私は:value => show.date渡します。私がshowのオブジェクトを親ビューから渡さなかったために機能しない理由がありました。私はそれを含めるようにrenderラインを変更 - 親ビューは次のようになります。

<%= form_tag("/shows/update_individual", :method => "put") do %> 
    <% for show in @shows %> 
     <%= fields_for "shows[]", show do |f| %> 
      <%= render "fields", :f => f, :show => show %> 
     <% end %> 
    <% end %> 
    <%= submit_tag "Submit"%> 
<% end %> 
11

JQueryのdatepickerは、事前入力された日付をフォーマットしません。
デフォルトの 'yyyy-mm-dd'形式の生の日付ではなく、書式付きの日付をテキストフィールドで使用して、レール側で処理する必要があります。

例 - Rails date format in a text_field

+0

うん、私はそれを認識しましたが、DBから出てくる日付をどのようにフォーマットするかわかりません。 – codedog

+0

が参考になりました。ヘルパーやモデル側でそれを扱うより洗練された方法があります。 – Jayendra

+0

'@ date'がnilなのでエラーになります。フォームヘルパーによって現在参照されているレコードを取得するにはどうすればよいですか? – codedog

0

@

<%= f.text_field :date, :class => "datepicker", :value => @model.date.strftime("%d %m %Y") %> 

より多くの例あなたは、クエリ自体に日付をフォーマットすることができますMySQLデータベースを使用している場合。

サンプルコード

 date_format(date_field,"%d %m %y") 
0

私は何をやってしまったことがちょうど通常のテキスト入力を作成し、マークにISO形式の日付と、追加情報とそれを事前に移入することですそれは日付入力として(例えば、rel = "date")です。

クライアント側では、元のフィールドの名前を引き継ぐ新しい隠し入力を作成するためのJavaScriptが用意されています(これをオーバーライドして、元の名前プロパティも削除してください)。 datepickerは元のフィールドに関連付けられ、altField/altFormatを使用して非表示フィールドをISO日付と同期させます。

// used in jQuery's .each 
function create_datepicker_for(_, el) { 
    var e = $(el), 
     mirror, 
     date; 

    // attach a hidden field that mirrors the proper date 
    mirror = $('<input type="hidden"></input>') 
      .prop('name', e.prop('name')) 
      .insertAfter(e); 

    if (e.val()) { date = new Date(e.val()); } 

    e 
    .prop('name', '')  /* make sure this is not sent to the application */ 
    .datepicker({ 
    altField: mirror,  /* "mirror" is the hidden field */ 
    altFormat: 'yy-mm-dd' /* you do not want anything but ISO */ 
    }); 

    if (date) { e.datepicker('setDate', date) } 
} 

これはすべてを同期状態に保ち、アプリケーションに適切な日付形式を送信し、誰もが期待しているように劣化します。

関連する問題