【问题标题】:Problem in Rails scaffold for DATE fieldsDATE 字段的 Rails 脚手架问题
【发布时间】:2010-11-26 01:17:32
【问题描述】:

当我使用 Rails 脚手架时,我无法访问页面来编辑字段。它向我展示了所有 DATE 字段的某种问题。这是错误:

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 %>

以及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

以及模型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 ;

完整查看源代码:

<% 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 %>

会是什么?

【问题讨论】:

    标签: ruby-on-rails datetime date scaffolding scaffold


    【解决方案1】:

    我在this link 和这个one 上找到了解决方案:

    当您在您的应用程序中设置 I18n.locale 到不同的东西 比“en”,你有以下 您认为的简单代码:

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

    你会得到不能将符号转换为字符串的 date_select 助手。问题可能是 通过给出 date_select 获救 像这样的辅助命令:

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

    或者通过在通常位于 config/locales/your_lang.yml 的 yml 文件中进行排序 这个

    date:   
      formats: 
        default: ""
        long: ""
        short: ""
      order:
        - :year
        - :month
        - :day
    

    【讨论】:

    【解决方案2】:

    这很可能是由本地化引起的。您输入了与 :en 不同的标准语言环境(在 application.rb 或 environment.rb 中),但您没有为月份名称声明适当的翻译,导致 rails 停止。您可以从GitHub下载标准翻译文件。

    【讨论】:

      【解决方案3】:

      能否也显示错误消息?

      更新:

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

      或者试试这个:

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

      【讨论】:

      • 请给我看完整的表格代码。在问题文本中看到您的 sql 语句作为格式化代码会很好。
      • 也许你应该尝试传递一个字符串而不是一个符号...见上面的代码
      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2014-04-22
      • 2010-10-23
      • 2019-03-30
      • 1970-01-01
      相关资源
      最近更新 更多