2009-06-01 10 views
7

Sto lavorando a un progetto che ha ricorrenti eventi settimanali. Pertanto, io uso diversi campi DateTime in modo non tradizionale. Quello su cui sto lavorando è un FormBuilder che crea un campo che emette una selezione per un giorno della settimana e una selezione per il tempo. Sto utilizzando un plugin di dodici ore che ho trovato on-line, in modo che funziona:Rails Formbuilder Domanda

class ActionView::Helpers::FormBuilder 
    def dow_time(dow,time,options={}) 
    rval = select(dow, DateTime::DAYNAMES) 
    rval += time_select(time, {:minute_step => 15, :ignore_date => false, :twelve_hour => true}) 
    end 
end 

Il problema che sto avendo è che il giorno della settimana di selezione in realtà non ha un valore predefinito selezionato. Funziona bene sulle mie pagine create, ma non sulle pagine di modifica. dow è un simbolo che fa riferimento al campo nel modello chiamante dove la stringa del giorno della settimana è "Monday", "Tuesday", ecc. Come posso estrarre quel valore dal modello chiamante usando dow.

self[dow] 

Non funziona poiché si tratta di una classe diversa.

Qualche idea? Qualcosa di diverso?

risposta

13

Se sei all'interno di un FormBuilder, allora si può accedere all'oggetto corrente, semplicemente utilizzando la variabile 'oggetto'.

Es:

In: edit.html.erb

<% form_for(@event) do |form| %> 
    <%= form.custom_datetime_select(:event_starts_at) %> 
<% end %> 

Nella tua FormBuilder

def custom_datetime_select(field, options = {}) 
    start_time = object.send(field) 
    ... 
end 

Sia object e object_name sono impostati per voi quando si chiama form_for.

Vedere actionpack/lib/action_view/helpers/form_helper.rb per ulteriori dettagli.

+0

Hai vinto, è proprio quello che sto cercando. Grazie! –

0

Questo dovrebbe funzionare per voi ...

class ActionView::Helpers::FormBuilder 
    def dow_time(dow_model, time, options={}) 
    rval = select(dowmodel, :dow, DateTime::DAYNAMES) 
    rval += time_select(time, {:minute_step => 15, :ignore_date => false, :twelve_hour => true}) 
    end 
end 
+0

self.read_attribute fallisce con: metodo non definito 'read_attribute' per # "modelinstance" non funziona perché il modello è variabile, o forse sto fraintendendo quello che stai dicendo. –

+0

Ho modificato il codice. Chiamalo con: <% = dow_time (@mymodel, time, etc ...)%> –

+0

Aiutato molto! Grazie. :) –