2009-06-01 9 views
7

Estoy trabajando en un proyecto que tiene eventos semanales recurrentes. Por lo tanto, utilizo varios campos DateTime de una manera no tradicional. En lo que estoy trabajando es en un FormBuilder que crea un campo que genera una selección para un día de la semana y una selección de tiempo. Estoy usando un plugin de doce horas he encontrado en Internet, por lo que funciona:Rails Formbuilder Pregunta

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 

El problema que estoy teniendo es que el día de la semana de selección no tiene realmente un valor predeterminado seleccionado. Esto funciona bien en mis páginas de creación, pero no en las páginas de edición. dow es un símbolo que hace referencia al campo en el modelo de llamada donde la cadena del día de la semana es "Lunes", "Martes", etc. ¿Cómo puedo sacar ese valor del modelo de llamada usando dow?

self[dow] 

No funciona, ya que pertenece a una clase diferente.

¿Alguna idea? ¿Algo diferente?

Respuesta

13

Si estás dentro de una FormBuilder, a continuación, se puede acceder al objeto actual por el simple uso de la variable 'objeto'.

Ex:

En: edit.html.erb

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

En su FormBuilder

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

Tanto object y object_name se establecen para cuando llame form_for.

Ver actionpack/lib/action_view/helpers/form_helper.rb para más detalles.

+0

Usted gana, eso es justo lo que estoy buscando. ¡Gracias! –

0

Esto debería funcionar para usted ...

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 falla con: método no definido 'read_attribute' para # "modelinstance" no funciona porque el modelo es variable, o tal vez estoy malentendido lo Estás diciendo. –

+0

He editado el código. Llámalo con: <% = dow_time (@mymodel, time, etc ...)%> –

+0

¡Ayudó mucho! Gracias. :) –

Cuestiones relacionadas