tiene que definir una nueva clase DatePickerInput
.
module SimpleForm
module Inputs
class DatePickerInput < Base
def input
@builder.text_field(attribute_name,input_html_options)
end
end
end
end
Y ahora se puede escribir
<%= f.input :deadline, :as => :date_picker %>
¡Por supuesto también necesita
$("input.date_picker").datepicker();
en application.js
Esto es muy útil para localizar fechas. Mira esto:
module SimpleForm
module Inputs
class DatePickerInput < Base
def input
@builder.text_field(attribute_name, input_html_options.merge(datepicker_options(object.send(attribute_name))))
end
def datepicker_options(value = nil)
datepicker_options = {:value => value.nil?? nil : I18n.localize(value)}
end
end
end
end
¡Ya tienes una fecha localizada en el campo de texto!
Actualización: una forma más limpia de hacer lo mismo
module SimpleForm
module Inputs
class DatePickerInput < SimpleForm::Inputs::StringInput
def input_html_options
value = object.send(attribute_name)
options = {
value: value.nil?? nil : I18n.localize(value),
data: { behaviour: 'datepicker' } # for example
}
# add all html option you need...
super.merge options
end
end
end
end
Heredar del SimpleForm::Inputs::StringInput
(como se dijo @kikito) y añadir algunas opciones html. Si necesita también una clase específica se puede añadir algo así como
def input_html_classes
super.push('date_picker')
end
Gran respuesta, funcionó a la perfección. Un par de puntos extra. La 5ª línea del código de entrada personalizada debe ser '@ builder.text_field (attribute_name,: class => 'date_picker') '. Y esta clase necesita ir a la aplicación de archivo/inputs/date_picker_input.rb. – phatmann
Consulte mi respuesta a continuación si está utilizando simple_form 2.x – kikito
Gracias. Una pequeña falta de ortografía, hay dos 'clases' en su código actualizado – Frankel