2017-08-03 12 views
2

Googleがこれを理解するために私の探求で私を助けていないので、私はこの問題に遭遇し、誰のためにそれを共有することになり考え出し:ルビーNoMethodError:[]のための未定義のメソッド `メッセージ:配列

ときモデルを保存しようとすると、私が手

NoMethodError: undefined method `messages' for []:Array 
0: /.../active_record/autosave_association.rb:491:in `_ensure_no_duplicate_errors' 
1: /.../active_support/callbacks.rb:413:in `block in make_lambda' 
2: /.../active_support/callbacks.rb:246:in `block in halting' 
3: /.../active_support/callbacks.rb:511:in `block in invoke_after' 
4: /.../active_support/callbacks.rb:511:in `each' 
5: /.../active_support/callbacks.rb:511:in `invoke_after' 
6: /.../active_support/callbacks.rb:132:in `run_callbacks' 
7: /.../active_support/callbacks.rb:825:in `_run_validation_callbacks' 
8: /.../active_model/validations/callbacks.rb:110:in `run_validations!' 
9: /.../active_model/validations.rb:335:in `valid?' 

例モデル:

class Foo < ActiveRecord::Base 

    def do_stuff 
    @errors = [] 
    @errors << 'Bad stuff' if self.bar > 4 
    @errors 
    end 

end 

例コード:

foo = Foo.first 
foo.do_stuff 
foo.save # or foo.valid?, etc. 

答えて

6

原因

このエラーメッセージの原因はFooクラスは、インスタンスレベル@errors変数を作成することです。

ActiveRecordは、モデルのerrors変数でデータベースエラーを追跡します。モデルを検証しようとすると、この変数のエラーメッセージがないかどうかがチェックされます。

ソリューション

異なる名前(例えば@foo_errors)に変更@errors

関連する問題