DATE 字段的 Rails 脚手架问题
Posted
技术标签:
【中文标题】DATE 字段的 Rails 脚手架问题【英文标题】:Problem in Rails scaffold for DATE fields 【发布时间】: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 %>
会是什么?
【问题讨论】:
【参考方案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
【讨论】:
这显然解决了错误,但之后会出现其他问题,例如缺少月份翻译。我建议有这个问题的人从github.com/svenfuchs/rails-i18n/tree/master/rails/locale复制整个日期树【参考方案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 语句作为格式化代码会很好。 也许你应该尝试传递一个字符串而不是一个符号...见上面的代码以上是关于DATE 字段的 Rails 脚手架问题的主要内容,如果未能解决你的问题,请参考以下文章