【问题标题】:date_field - can't convert Symbol into Stringdate_field - 无法将符号转换为字符串
【发布时间】:2012-10-11 22:34:36
【问题描述】:

我是一个非常新鲜的 ruby​​ on 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 字段是否为空,我都会收到此错误。你知道我可能错过了什么吗?奇怪的是它昨天还在工作。

【问题讨论】:

  • 显而易见的问题是你昨天和今天之间发生了什么变化?
  • 哦,是的,我也在问自己同样的问题,但是修改太多了,我什至都记不清了
  • 你在使用版本控制吗?
  • 很遗憾没有,但我所做的所有更改主要是在视图中完成的,所以我认为这不是原因
  • 哈哈相信我,我比你更难过,但别担心,我会想办法的,这需要非常简单的事情

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


【解决方案1】:

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

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

最好的问候, 黛娜

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

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

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

      我在使用 i18n 时遇到了同样的问题。一切对英语来说都很好;但是在使用其他语言查看时,视图抛出了“can't convert Symbol into String”错误。

      我使用的解决方案是为“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 文件中添加内容了。

      【讨论】:

        【解决方案4】:

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

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

        所以,你需要:

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

        【讨论】:

        • 这是表单生成器版本,不需要第一个参数,因为它是隐含的。 api.rubyonrails.org/classes/ActionView/Helpers/…
        • 上面的代码被包裹在form_for块中,这就是为什么没有对象参数但即使我将你的代码与@object一起使用,它仍然给我同样的错误。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-13
        • 2012-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多