繁体   English   中英

Ruby NoMethodError:[]:Array的未定义方法“ messages”

[英]Ruby NoMethodError: undefined method `messages' for []:Array

由于Google并没有帮助我解决这个问题,因此我想与其他遇到此问题的人分享它:

尝试保存模型时,我得到

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.

原因

出现此错误消息的原因是Foo类创建实例级别@errors变量。

ActiveRecord在模型的errors变量中跟踪数据库错误。 当您尝试验证模型时,它将检查此变量中的错误消息。

解决方案

@errors更改为其他名称(例如@foo_errors )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM