Rails 3.1 text_field al forma di aiuto e di datepicker di jQuery formato della data

Ho un campo di un form nel mio Guide di vista come questo:

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

Una funzione javascript che consente di convertire tutti i campi di input di quella classe per un jQueryUI datepicker.

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

Finora tutto bene. Posso modificare il record e persiste la data correttamente tutti la strada verso il DB. Il mio problema è che quando voglio modificare il record. Quando il modulo viene pre-popolato da record che mostra in ‘yyyy-mm-dd’ formato. Il javascript solo formati di date selezionato nel controllo datepicker. C’è un modo per formattare la data recuperati dal database? A che punto posso fare questo?

Grazie,
Dany.

Qualche dettaglio in più seguito la discussione che segue, il mio modulo è diviso in due file, una vista parziale. Ecco la vista:

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

Ed ecco il _fields vista parziale:

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

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

Controller codice:

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

Io sono aggiunti i seguenti in environment.rb:

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

Ora la visualizzazione del formato giusto quando uso @show.data la vista, ma la forma helper viene ancora visualizzato il formato raw.

OriginaleL’autore codedog | 2011-11-12

4 Replies
  1. 11

    Datepicker di JQuery non si formatta la pre-popolato data.

    Si avrebbe bisogno di gestire sui binari lato utilizzando la data formattata con il textfield, invece di raw data che ha il valore di default ‘yyyy-mm-dd’ formato.

    Esempio –

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

    Più esempi @ Guide di formato di data in un text_field al

    Yup, ho capito, ma io non sono sicuro di come formattare la data come si esce dal DB…
    aggiunta di un esempio. Non ci sarebbe più elegante metodi per gestire sul helper o modello di lato.
    Ricevo un errore in quanto @date è pari a zero. Come posso ottenere il record attualmente riferimento il modulo helper?
    era un esempio. Si sarebbe probabilmente avere il modello oggetto “@modello.data” che si avrebbe bisogno di utilizzare. Sarebbe necessario controllare nil prima di utilizzare il strtime metodo. Aggiunto un metodo formatteddate del modello stesso, che non sopra.
    Ho provato @model ma che non ha funzionato, ho avuto undefined method data’ #<ActionView::Helper::FormBuilder:0x000001052b5f38>`. Ho provato anche @model_instance senza alcun risultato…

    OriginaleL’autore Jayendra

  2. 1

    RISOLTO: ho passare il :value => show.date come suggerito da Jayendra sopra. Il motivo non è perché non passare il show oggetto dalla visualizzazione principale. Ho cambiato il render linea di includere, capogruppo vista ora assomiglia a questo:

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

    OriginaleL’autore codedog

  3. 0

    se si utilizza il database mysql è possibile formattare la data in query stessa.

    Codice di esempio

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

    OriginaleL’autore balaphp

  4. 0

    Quello che ho finito per fare è semplicemente creare un normale testo di input e di precompilare con una data in formato ISO e le informazioni aggiuntive per segno come data di ingresso (per esempio, il ).

    Sul lato client, ho JavaScript per creare un nuovo input nascosto che prende il nome di campo originale (ignorando, per buona misura ho anche eliminare la proprietà del nome originale). Il datepicker è allegato all’originale del campo, e utilizza altField/altFormat per sincronizzare il campo nascosto con un ISO data.

    //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) }
    }

    Questo sembra tenere tutto sincronizzato, invia il corretto formato della data per l’applicazione, e si degrada così come chiunque si aspetterebbe.

    OriginaleL’autore Nicos

Lascia un commento