7

このエラーの非常に奇妙な例が​​あります。

NoMethodError (undefined method `[]' for nil:NilClass):
app/controllers/main_controller.rb:150:in `block in find_data_label'
app/controllers/main_controller.rb:149:in `each'
app/controllers/main_controller.rb:149:in `find_data_label'
app/controllers/main_controller.rb:125:in `data_string'
app/controllers/main_controller.rb:35:in `catch'

奇妙なことに、エラーが発生したと書かれている 150 行目はループ内にあり、エラーが発生する前に 11 回完全に実行されます。なぜそれがうまく機能するのかについては考えがありませんが、ifステートメントがtrueを返すループが効果的である前に1行失敗します。

これはコードです:

  def find_data_label(label)
    @fields.each do |f|
      puts "f[:field_data]['Title'] = #{f[:field_data]['Title']}" # <--- line 150
      if f[:field_data]['Title'] == label
        return f
      end
    end
  end

そして、これはエラーが発生する前の出力です。

f[:field_data]['Title'] = Name
f[:field_data]['Title'] = Name
f[:field_data]['Title'] = Mobile number
f[:field_data]['Title'] = Email
f[:field_data]['Title'] = Date of birth
f[:field_data]['Title'] = Gender
f[:field_data]['Title'] = Street name
f[:field_data]['Title'] = Street number
f[:field_data]['Title'] = My local Puckles store is in
f[:field_data]['Title'] = Suburb
f[:field_data]['Title'] = Postcode
Completed 500 Internal Server Error in 2047ms

助けてくれてありがとう。

4

2 に答える 2

4

@fields 要素の 1 つに、:field_data の Title が含まれていません。呼び出す前に @fields を調べてみてください@fields.each:

Rails.logger.warn '-'*40
Rails.logger.warn @fields.inspect

サーバー ログをチェックして、@fields に含まれる要素を確認します。

于 2012-05-30T05:18:35.343 に答える
1

そのエラーについては、http: //mongoid.org/en/mongoid/docs/tips.htmlも参照してください。

たとえば、MongoIDと古いバージョンのRubyを使用している可能性があります。

于 2012-10-31T04:27:49.793 に答える