ruby-on-rails - ruby NoMethodError : undefined method `messages' for []:Array

标签 ruby-on-rails ruby rails-activerecord

由于谷歌没有帮助我解决这个问题,我想我会把它分享给遇到这个问题的其他人:

尝试保存模型时,我得到

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)。

关于ruby-on-rails - ruby NoMethodError : undefined method `messages' for []:Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45472977/

相关文章:

ruby-on-rails - ActiveRecord 如何处理传递给关联属性方法的参数?

ruby-on-rails - 我应该有一个 heroku worker dyno 来轮询 AWS SQS 吗?

ruby-on-rails - activemerchant 未定义方法 'month'

ruby-on-rails - 单个或多个数据库? ( rails 3)

ruby-on-rails - 编写自定义 OmniAuth 策略

ruby - 如果包括? == 错误

ruby-on-rails - 跑rails 3.2.13但是还没安装呢?

Ruby 字符串 - << 和 += 之间的区别

sql - 结合 HABTM 的作用域和 belongs_to 与 OR 的关联

arrays - 使用数组键进行哈希到哈希的简单哈希