date_field - 无法将Symbol转换为String

时间:2012-10-11 22:34:36

标签: ruby-on-rails ruby-on-rails-3

我对rails开发人员非常新鲜,我在用户配置文件编辑表单中显示date_field时遇到了一些麻烦。它突然停止工作,我无法调试什么是错误的,为什么它不起作用。这是我的代码:

_form.html.haml

= form_for(@profile) do |f|
  = f.label :dob, 'Date of birth', :class => 'control-label'
  = f.date_select :dob, :start_year => Time.now.year - 50, :end_year => Time.now.year - 5, :include_blank => true

它给了我以下错误:

  

无法将符号转换为字符串

第26行的

date_select的那个。无论dob字段是否为空,我都会收到此错误。你知道我可能错过了什么吗?奇怪的是它昨天正在运作。

4 个答案:

答案 0 :(得分:5)

也许有点晚了,但我在这里找到了一些东西:

http://i18n.lighthouseapp.com/projects/14947/tickets/12-i18n-and-date_select-exception

祝你好运, 黛娜

编辑:我必须将语言环境.yml中的日期顺序更改为

 -    order: [ :year, :month, :day ]
 +    order:
 +      - :year
 +      - :month
 +      - :day

答案 1 :(得分:2)

这是一个翻译问题:您必须在:order文件中添加it.yml规则,或在表单中添加:order作为参数。

= f.date_select :dob, :start_year => Time.now.year - 50, 
                      :end_year => Time.now.year - 5, 
                      :order => [:day, :month, :year],
                      :include_blank => true

答案 2 :(得分:1)

我在使用i18n时遇到了同样的问题。一切都非常适合英语;但是当使用其他语言查看时,该视图会抛出“无法将符号转换为字符串”错误。

我使用的解决方案是设置“date_select”的语言,添加“:locale”,如下所示:

<%= f.date_select(:admissionyear, :start_year => 1940, :end_year => Date.today.year, :discard_day => true, :discard_month => true, :locale => 'en') %>

这样,当使用其他语言时,您不需要向其他i18n yml文件添加内容。

答案 3 :(得分:0)

data_select function的签名有两个字符串参数来启动它,哈希直到第三个参数才开始:

date_select(object_name,method,options = {},html_options = {})

所以,你需要:

date_select(:user,:dob,:start_year =&gt; Time.now.year - 50,:end_year =&gt; Time.now.year - 5,:include_blank =&gt; true)