Datas em campos text_field
Conforme a discussão na lista rails-br, ainda não encontrei uma boa forma de resolver o problema de entrada de datas em formato brasileiro em um text_field. O problema ocorre porque o formato esperado é ano/mês/dia (ou mês/dia/ano, dependendo do banco de dados), enquanto que o formato brasileiro é dia/mês/ano. Para os interessados, resolvi paliativamente o problema com o monkeypatching abaixo (coloque o código em um arquivo no diretório config/initializers) . Vou testar melhor essa solução e atualizo aqui eventuais mudanças. Se alguém souber de uma solução melhor, me avise!
class ActionView::Helpers::FormBuilder def text_field_with_conversion(*args) # args[0] is the method if object column = object.class.columns_hash[args[0].to_s] args[0] = "convert_#{args[0]}".to_sym if column && column.type == :datetime else # TODO: treat symbols, ex.: text_field(:model, :attribute) end text_field_without_conversion(*args) end alias_method_chain :text_field, :conversion end module ActiveRecord class Base def method_missing_with_conversion(method_id, *args) if method_id.to_s.starts_with? "convert_" method_name = method_id.to_s[8..-1] eval %{ def convert_#{method_name}=(value) @original_#{method_name} = value self.#{method_name} = UtilDate.to_date(value) end def convert_#{method_name} #{method_name}.blank? ? @original_#{method_name} : #{method_name} end } else method_missing_without_conversion(method_id, *args) end end alias_method_chain :method_missing, :conversion end end
