Pregunta

Estoy trabajando en un proyecto que tiene, eventos semanales recurrentes. Por lo tanto, utilizo varios campos DateTime de una manera no tradicional. Lo que estoy trabajando es un FormBuilder que crea un campo que da salida a un selecto para un día de la semana, y un selecto por el tiempo. Estoy usando un plugin de doce horas he encontrado en Internet, por lo que funciona:

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 crear, pero no en las páginas de edición. Dow es un símbolo que hace referencia al campo en el modelo de llamadas en el día de la semana es la cadena "Lunes", "Martes", etc. ¿Cómo puedo tirar de ese valor a partir del modelo de llamadas usando Dow.

self[dow]

No funciona ya que este pertenece a una clase diferente.

¿Alguna idea? Algo diferente?

¿Fue útil?

Solución

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

Ejemplo:

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.

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

Otros consejos

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top