Pregunta rieles FormBuilder
-
06-09-2019 - |
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?
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