ActiveRecord::Base:Class没有'mass_assignment_sanitizer='方法(NoMethodError)

26

我正在学习 Rails,使用 Michael Hartl 的精彩的 Ruby on Rails 教程。我现在在第 3.2.2 节(TDD),需要执行以下命令来运行我的 Rails 项目的 rspec 测试:

bundle exec rspec spec/

但是它不起作用。我得到了这个错误:

/Users/mh/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/
activerecord-3.1.3/lib/active_record/base.rb:1088:in `method_missing':
undefined method `mass_assignment_sanitizer=' for
ActiveRecord::Base:Class (NoMethodError)

我试过重新安装rspec更改我的Gemfile,但是没有什么能满足这个未定义方法的错误!


哦,另外,当我尝试运行 rspec spec/ 时,会出现“找不到命令”的错误。 - hao_maike
尝试不带斜杠运行rspec spec。(只是思考中) - Sergio Tulentsev
很不幸,即使没有斜杠,我仍然得到相同的错误。 - hao_maike
如果您在config/enviroments/test.rb中设置config.active_record.mass_assignment_sanitizer = :strict,会发生什么?您正在使用Rails2吗? - Fenec
我正在使用Rails 3.1。我添加了这行代码,但仍然出现错误。 - hao_maike
2个回答

76

你是从 Rails 3.2 RC1 版本降级过来的吗?请将以下两行注释掉:

config.active_record.mass_assignment_sanitizer = :strict
config.active_record.auto_explain_threshold_in_seconds = 0.5

在我从3.2降级到3.1.2之后,这对我完美地起作用了! - Dan Higham
2
由于TS正在使用rspec,他应该在test.rb中注释掉这行代码,而不是在development.rb中。 - henghonglee
3
在升级Rails 3.2到4.2时,我遇到了相同的问题并找到了解决方法。 - andrewcockerham

1
虽然m818的答案可以解决问题,但如果您在代码其他地方使用了不推荐的方法,仍可能会出现错误。
我遇到了同样的问题,注释掉那些行可以消除一些错误,但并非全部,任何使用`attr_accessible`的地方都会给我同样的错误。
原来是`active_record` gem更新到了4.0,而我不想要这个版本。由于我正在使用Padrino应用程序,所以必须在Gemfile中执行以下操作:
gem 'activerecord', '= 3.2.12', :require => "active_record"

那解决了所有问题,我不必在database.rb中注释掉这些行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接