views:

945

answers:

2

When I use Rails scaffold, I can't access the page to edit fields. It shows me some kind of problem with all DATE fields. Here's the error:

can't convert Symbol into String

Extracted source (around line #124):

    121:   </p>
    122:   <p>
    123:     <%= f.label :dataDeCadastro %><br />
    124:     <%= f.date_select :dataDeCadastro %>

And part of the stackTrace:

/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:564:in `include?'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:564:in `select_date'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:832:in `to_date_select_tag_without_error_wrapping'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/active_record_helper.rb:268:in `to_date_select_tag'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:179:in `date_select'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:889:in `date_select'
app/views/usuarios/edit.html.erb:124
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/form_helper.rb:313:in `fields_for'
/Library/Ruby/Gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/form_helper.rb:253:in `form_for'
app/views/usuarios/edit.html.erb:3

And the model sql:

CREATE TABLE `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario` varchar(50) DEFAULT NULL,
  `recebeNews` smallint(1) DEFAULT NULL,
  `cidade` varchar(30) DEFAULT NULL,
  `email` varchar(40) DEFAULT NULL,
  `endereco` varchar(70) DEFAULT NULL,
  `estado` varchar(3) DEFAULT NULL,
  `cep` varchar(10) DEFAULT NULL,
  `numero` varchar(10) DEFAULT NULL,
  `telefone` varchar(30) DEFAULT NULL,
  `cnpj` varchar(20) DEFAULT NULL,
  `cpf` varchar(18) DEFAULT NULL,
  `inscricaoEstadual` varchar(20) DEFAULT NULL,
  `rg` varchar(15) DEFAULT NULL,
  `complemento` varchar(70) DEFAULT NULL,
  `sexo` varchar(1) DEFAULT NULL,
  `bairro` varchar(70) DEFAULT NULL,
  `telefoneResidencial` varchar(10) DEFAULT NULL,
  `dddTelefoneCelular` varchar(2) DEFAULT NULL,
  `dddTelefoneComercial` varchar(2) DEFAULT NULL,
  `dddTelefoneResidencial` varchar(2) DEFAULT NULL,
  `ramalDoTelefoneComercial` varchar(10) DEFAULT NULL,
  `telefoneCelular` varchar(10) DEFAULT NULL,
  `telefoneComercial` varchar(10) DEFAULT NULL,
  `creditoPessoal` smallint(1) DEFAULT NULL,
  `descontoPessoal` smallint(1) DEFAULT NULL,
  `motivoDoBloqueio` varchar(255) DEFAULT NULL,
  `nomeNaReceitaFederal` varchar(255) DEFAULT NULL,
  `valorDoCreditoPessoal` double DEFAULT NULL,
  `valorDoDescontoPessoal` double DEFAULT NULL,
  `bloqueio` smallint(1) DEFAULT NULL,
  `dataDeCadastro` datetime DEFAULT NULL,
  `dataLimiteDoDescontoPessoal` datetime DEFAULT NULL,
  `situacaoNaReceitaFederal` varchar(255) DEFAULT NULL,
  `dataDeNascimento` datetime DEFAULT NULL,
  `senha` varchar(255) DEFAULT NULL,
  `interior` smallint(1) DEFAULT NULL,
  `observacao` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=5754 DEFAULT CHARSET=latin1 ;

full view source:

<% form_for(@usuario) do |f| %>
<%= f.error_messages %>

<p>
  <%= f.label :usuario %>
  <%= f.text_field :usuario %>
</p>
<p>
  <%= f.label :cpf, "CPF" %>
  <%= f.text_field :cpf %>
</p>
<p>
  <%= f.label :rg, "RG" %>
  <%= f.text_field :rg %>
</p>
<p>
  <%= f.label :cnpj, "CNPJ" %>
  <%= f.text_field :cnpj %>
</p>
<p>
  <%= f.label :sexo, "Sexo" %><br>
  <%= f.radio_button :sexo, :M %>M<br>
  <%= f.radio_button :sexo, :F %>F
</p>
<p>
  <%= f.label :dataDeNascimento, "Data de Nascimento" %>

  <%= f.date_select :dataDeNascimento %>
</p>
<p>
  <%= f.label :endereco %>
  <%= f.text_field :endereco %>
</p>
<p>
  <%= f.label :cidade, "Cidade" %>
  <%= f.text_field :cidade %>
</p>
<p>
  <%= f.label :estado, "Estado" %>
  <%= f.text_field :estado, :maxlength => "2" %>
</p>
<p>
  <%= f.label :cep, "CEP" %>
  <%= f.text_field :cep, :maxlength => "10" %> (00000-000)
</p>
<p>
  <%= f.label :telefone, "Telefone" %>
  <%= f.text_field :telefone %>
</p>
<p>
  <%= f.label :email %>
  <%= f.text_field :email %>
</p>
<p>
  <%= f.label :senha, "Senha" %>
  <%= f.password_field :senha %>
</p>
<p>
  <%= f.label :senha_confirmation, "Confirmação da Senha" %>
  <%= f.password_field :senha_confirmation %>
</p>
<p>
  <%= f.label :recebeNews %><br />
  <%= f.check_box :recebeNews %>
</p>
<p>
  <%= f.submit "Enviar" %>
</p>
<% end %>

What could it be?

A: 

Could you show also the error-message?

UPDATE:

<p>
  <%= f.label :dataDeNascimento, "Data de Nascimento" %>

  <%= f.date_select "dataDeNascimento" %>
</p>

or try this:

<p>
  <%= f.label :dataDeNascimento, "Data de Nascimento" %>

  <%= date_select "usario", "dataDeNascimento" %>
</p>
Lichtamberg
could you show me your model?
Lichtamberg
please show me your full form-code. Would be good to see your sql-statement as formatted code in your question-text.
Lichtamberg
all details now in question
Daniel Cukier
Maybe you should try to pass a string instead of a symbol...see the code above
Lichtamberg
A: 

I've found the solution on this link:

When in your application you have set the I18n.locale to something different than "en" and you have the following simple code in your view:

 <%= date_select("user_info", "birthdate") %>

You'll get the can't convert Symbol into String for the date_select helper. The problem can be rescued by giving the date_select helper order like this:

 <%= date_select("user_info", "birthdate", :order => [:day,:month,:year]) %>

or by doing order in the yml file usually located at config/locales/your_lang.yml like this

date:   
  formats: 
     default: ""
     long: ""
     short: ""
  order: [ :day, :month, :year ]
Daniel Cukier