Hatena::ブログ(Diary)

税理士業界でSaaS開発をしながら綴る日記 このページをアンテナに追加 RSSフィード

2009-01-28

エラー回避 date_select -- can't convert Symbol into String

| 17:20 | エラー回避 date_select -- can't convert Symbol into Stringを含むブックマーク エラー回避 date_select -- can't convert Symbol into Stringのブックマークコメント

環境

Ubuntu 8.1.0

jruby 1.1.6

Rails 2.2.2

MySQL 5.0

Rails 2.1 から Rails 2.2 にバージョンアップしていたら、View の date_select で以下のエラーが出た。

can't convert Symbol into String

なんでだ!?

エラー内容を見ると、

〜/jruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:564:in 'select_date'

〜/jruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb:845:in 'to_date_select_tag'

などなど出ているが、該当箇所のコードを見ても特におかしい点はないような気がする。。。

う〜〜ん、わからない。1日悩む。。


Rails 2.2 から、国際化(i18n)に関する簡単な機能が搭載されるようになった。

validation のメッセージとかを日本語化したかったので、早速 environment.rb の以下の一文を入れていた。

config.i18n.default_locale = :ja

これをコメントアウトしてWebサーバー再起動して実行したところ、date_select は普通に動くではないか!!

これが原因か。。Railsバグだ。たぶん・・・

というわけで調べたところこんな書き込みを発見!

これを元に、

〜/jruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/date_helper.rb

の以下のコードを

def translated_date_order
  begin
    I18n.translate(:'date.order', :locale => @options[:locale]) || []
  end
end

下のように書き換えたところ

def translated_date_order
  begin
    order = I18n.translate(:'date.order', :locale => @options[:locale])
    if order.respond_to?(:to_ary)
      order
    else
      [:year, :month, :day]
    end
  end
end

動いたーー!

というわけで次のRailsバージョンアップで対応してもらいたい問題だと思います。。

まぁとりあえず動いてよかった。。

hitokurohitokuro 2010/08/06 20:20 同じ問題解決のヒントになりましたありがとうございます。
結局解決策として、jaのlocaleに [:year, :month, :day]を表す表記を追加すると言う所で
具体的には ja.yml へ以下の記述を追加すると動作する様になります。

- ja.yaml -
date:
order:
- :year
- :month
- :day

masaaki008masaaki008 2010/08/06 23:42 コメントありがとうございます。
なるほど。勉強になりました。