0

現在、Rails のバージョンをアップグレード中ですが、date_select タグの 1 つで奇妙なエラーが発生しました。

これが犯人です:

    <%= date_select :consultant_assignment, :start_date, :order => [:day, :month, :year], 
:start_year => 5.years.ago.year, :end_year => 5.years.from_now.year, :use_short_month => true %>

これにより、次のようなエラーがスローされます。

NoMethodErrorプロファイル#show

46 行目が発生した app/views/people/_upcoming_assignments.html.erb の表示:

予期していなかったのに nil オブジェクトがあります! Array のインスタンスを期待していたかもしれません。nil.size の評価中にエラーが発生しました

抽出されたソース (46 行目あたり):

43:           <label for="consultant_assignment_start_date"><%= _('Start') %>:</label>
44:           <% debugger %>
45:           
46:           <%= date_select :consultant_assignment, :start_date, :order => [:day, :month, :year], :start_year => 5.years.ago.year, :end_year => 5.years.from_now.year, :use_short_month => true %>
47:           
48:           
49:           

この問題を追跡しようとしましたが、:order 配列に :month オプションを入れるとエラーが発生するようです。したがって、 :order => [:day, :year] を実行すると、ページが完全に読み込まれます。

私は正確な問題を探しましたが、フロントエンドの設計者であるため、これをどのように進めるかわかりません。これは私のコードによるエラーですか? それとも廃止された方法ですか?

は次のapplication traceとおりです。

/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:746:in `_unmemoized_month_names'
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/memoizable.rb:72:in `month_names'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:781:in `month_name'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:708:in `select_month'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:705:in `upto'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:705:in `select_month'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:898:in `send'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:898:in `build_selects_from_types'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:896:in `each'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:896:in `build_selects_from_types'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:646:in `select_date'
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_view/helpers/date_helper.rb:920:in `to_date_select_tag_without_error_wrapping'

私はメモされていない月の名前についてグーグルで検索しましたが、nada を見つけました。

さて、私はちょうどくそったれを機能させるために :order 句全体を取り出してみました。今回はエラーにはなりませんが、タグは表示されません! irb でチェックしてみましたが、どうやら私の date_select タグは select タグを返さず、隠しタグの束だけを返しているようです!

デフォルトのレールの例でこれを試しました:

date_select("post", "written_on")

irb はこれを返します:

=> "\n\n\n"

ご覧のとおり、select タグはどこにもありません。datetime_select を試したところ、select タグが表示されました。では、2.3.8 の date_select はどうなっているのでしょう?

4

2 に答える 2

0

Railsは何らかの理由で宣言された月の名前を見ることができないため、i18nに問題があるようです(デフォルトの言語はenであるため、表示する必要があります)。実際には、何らかの理由で、デフォルトの言語が表示されません。とにかく、今のところの簡単な修正は、constants.rb に MONTH_NAMES 定数を追加し、それを date_select のオプションに追加することでした。

于 2010-07-26T05:41:55.033 に答える
0

これらの形式を使用します

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

options タグ内に start_year 、 end_year 、 order_field などを入れます。

これはあなたを助けるかもしれないと思います。

Selects は、Active Record オブジェクトへのマルチパラメータ割り当て用に準備されています。

注: 日がオプションとして含まれていないが、月が含まれている場合、すべての月の選択が有効であることを確認するために、日は 1 日に設定されます。

于 2010-07-12T06:37:59.480 に答える