2011-11-12 50 views
4

我有一個表單域在我的Rails視圖是這樣的:的Rails 3.1 text_field形式助手和jQuery日期選擇器日期格式

<%= 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" 
      }) 

到目前爲止好。我可以編輯記錄,並一直持續到數據庫的日期。我的問題是當我想再次編輯記錄。當表格從記錄預填充時,它將以'yyyy-mm-dd'格式顯示。 javascript只格式化在datepicker控件中選擇的日期。有什麼辦法可以格式化從數據庫中檢索的日期嗎?我可以在哪個階段做到這一點?

謝謝, Dany。

在下面的討論之後的一些更多細節,我的表單分佈在兩個文件,一個視圖和一個部分。這裏的觀點:

<%= 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

解決:我通過在:value => show.date通過Jayendra上面所建議的。它不工作的原因是因爲我沒有通過父視圖中的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不會格式化預填充日期。
您需要通過使用帶有textfield的格式化日期而不是具有默認「yyyy-mm-dd」格式的原始日期來在導軌側處理它。

示例 -

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

更多的例子@Rails date format in a text_field

+0

是的,我意識到,但我不知道如何格式化日期,因爲它出來的數據庫... – codedog

+0

增加了一個例子。在助手或模型方面會有更優雅的方法來處理它。 – Jayendra

+0

由於@日期爲零,我收到一個錯誤。如何獲得當前由表單助手引用的記錄? – codedog

0

如果你正在使用mysql數據庫,你可以格式化查詢本身的日期。

示例代碼

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

我最終什麼事做的是隻創建一個普通的文本輸入,並與ISO格式的日期和其他信息預填充它來標記它作爲日期輸入(例如,rel =「date」)。

在客戶端,我有JavaScript來創建一個新的隱藏的輸入,它接受原始字段的名稱(因此覆蓋它,爲了好的措施,我也刪除了原始的名稱屬性)。日期選擇器附加到原始字段,並使用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) } 
} 

這似乎把一切都在同步,發送正確的日期格式的應用程序,並降低以及任何人會指望它。