Problema com JQuery e Datapicker

78 views
Skip to first unread message

TuxuserBR

unread,
Dec 30, 2009, 5:43:35 AM12/30/09
to rail...@googlegroups.com
Olá pessoal,

Estou com o seguinte problema, estou usando o text_field e o datapicker para pegar a data. No banco (postgres) o tipo da coluna é date.
O que ocorre é que quando submeto o 'form' a data não recebida pelo Model, no post vai 'OK', exemplo "12/12/2009". Mas o Model fica 'NIL'.
Alguém já passou por isso e conhece a solução?

Obrigado e bom fim de Ano a todos...

--
Nenhum de nós é tão bom quanto TODOS NÓS JUNTOS!

Marcio Aun Migueis

unread,
Dec 30, 2009, 5:50:29 AM12/30/09
to rail...@googlegroups.com
Você está usando form_for ? Está usando <%= text_field_tag :datepicker %> ? 

 No seu action, você tem que setar na mão a propriedade do objeto.

   @seuobj = params[:datepicker].to_date

Marcio

2009/12/30 TuxuserBR <waeol...@gmail.com>

--

Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.

TuxuserBR

unread,
Dec 30, 2009, 5:56:28 AM12/30/09
to rail...@googlegroups.com
Desculpe faltou detalhes,

Estou usando form_for e usei f.text_field e não funcionou, então fiz agora estou fazendo text_field_tag.

Acredita que não tentei fazer isso @objeto.data = params[:objeto][:data].to_date, vou tentar agora e lhes posto o que deu...

Obrigado.

2009/12/30 Marcio Aun Migueis <marc...@gmail.com>

Marcio Aun Migueis

unread,
Dec 30, 2009, 6:03:01 AM12/30/09
to rail...@googlegroups.com
Tenta params[:datepicker].to_date direto, ao inve's de params[:objeto][:datepicker].to_date , pois ele não passa pelo seu model do form_for

Marcio

2009/12/30 TuxuserBR <waeol...@gmail.com>

TuxuserBR

unread,
Dec 30, 2009, 6:19:37 AM12/30/09
to rail...@googlegroups.com
Marcio,

Fiz o anterior assim:

@objeto.data = params[:objeto][:datapiker].to_date

Cara funcionou perfeitamente... muito obrigado, essa foi muito boa.
Agora porque não funciona? Será que é um bug do form_for?

Mas blz... t++

Marcio Aun Migueis

unread,
Dec 30, 2009, 6:34:30 AM12/30/09
to rail...@googlegroups.com
Eu não sei dos detalhes do seu model, mas o nome do campo na tabela de ser  "data" e não "datepicker" . O form_for vai tentar encontrar o campo com o mesmo nome do text_field. se for f.text_field :datepicker, ele vai assumir que o objeto tem uma propriedade "datepicker" , quando na verdade a propriedade é  "data".

Boa sorte

Marcio

2009/12/30 TuxuserBR <waeol...@gmail.com>

Vinicius Luiz

unread,
Dec 30, 2009, 7:25:15 AM12/30/09
to rail...@googlegroups.com
Ola @tuxuser, passei por esse mesmo problema usando postgres+jquery.datapicker, para resolver fiz o seguinte...

no meu model acrescentei o codigo abaixo

  def nascimento=(nascimento)
    self[:nascimento] = nascimento.split('/').reverse.join('-') unless nascimento.blank?
  end

ele muda a saida do metodo get para yyyy-mm-dd ai funciona tranquilo...

att,

Vinicius Luiz
Skype/Yahoo: vinicius.luiz
MSN: vinic...@hotmail.com
Gtalk: mcp.vi...@gmail.com
Twitter: http://twitter.com/vinicius_luiz
Blog: http://viniciusluizz.wordpress.com

----------------------------------------------

           Analista Desenvolvedor - TI                
CETAM Ltda. - Centro de Tecnologia da Amazônia

when there is no place in hell, the dead walked the earth!


2009/12/30 TuxuserBR <waeol...@gmail.com>

Wilker

unread,
Dec 30, 2009, 9:23:16 AM12/30/09
to rail...@googlegroups.com
Vinicius, nao é bom sobreescrever o atributo diretamente nao, aconselho usar um atributo virtual para manter o original, da seguinte forma:

def nascimento_br
  nascimento.strftime("%d/%m/%Y")
end

def nascimento_br=(nascimento)
  self.nascimento = Date.strptime(nascimento, "%d/%m/%Y")
end

usar o strptime também é mais limpo que fazer os split/reverse/join ;)

apos criar o atributo virtual, lembrar de usar ele no form:

f.text_field :nascimento_br

como criou os 2 (getter/setter) ele tambem ja vai preencher o campo corretamente na hora de editar (usando o formato brasileiro)
---
Wilker Lúcio
Gerente de Tecnologia
Caju Agência Digital
http://www.caju.nu
+55 81 87417674


2009/12/30 Vinicius Luiz <mcp.vi...@gmail.com>

TuxuserBR

unread,
Jan 4, 2010, 1:23:19 PM1/4/10
to rail...@googlegroups.com
Boa tarde,

Wilker fiz sua solução e não funcionou, engraçado funciona quando trabalho com atributos virtuais assim como disse acima (funcionou), mas quando o atributo é do ActiveRecord não aceita. Mudei para timestamp para ver funciona, pois estava usando o tipo date e nada...

Para o objeto no active_record não funciona usar campos text_field para pegar data com o jQuery.

Vou tentar achar outra solução.

Se quiser ver o erro:

ArgumentError in TarefasController#create

invalid date


/usr/lib/ruby/1.8/date.rb:752:in `new'
/var/lib/gems/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/conversions.rb:19:in `to_date'
/home/wesley/tmp/octopus/app/controllers/tarefas_controller.rb:17:in `create'
/var/lib/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/base.rb:1331:in `send'
/var/lib/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/base.rb:1331:in `perform_action_without_filters'
/var/lib/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/filters.rb:617:in `call_filters'



2009/12/30 Wilker <wilke...@gmail.com>

Wilker

unread,
Jan 4, 2010, 1:31:50 PM1/4/10
to rail...@googlegroups.com
Tenta deixar o writer dessa forma:

def nascimento_br=(nascimento)
  self.nascimento = Date.strptime(nascimento, "%d/%m/%Y").strftime("%Y-%m-%d")
end
---
Wilker Lúcio
Gerente de Tecnologia
Caju Agência Digital
http://www.caju.nu
+55 81 87417674


2010/1/4 TuxuserBR <waeol...@gmail.com>

TuxuserBR

unread,
Jan 4, 2010, 3:01:05 PM1/4/10
to rail...@googlegroups.com
Grande Wilker,

Agora mudou o erro, sinceramente, não estou conseguindo entender, o motivo do rails fazer isso (estou usando form_for).

NoMethodError in TarefasController#create

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each


2010/1/4 Wilker <wilke...@gmail.com>
Reply all
Reply to author
Forward
0 new messages