2011-12-27 70 views
24

我正在学习Rails与真棒Ruby on Rails教程迈克尔哈特尔。我在section 3.2.2 (Test Driven Development)中,我需要运行下面的命令来运行RSpec的测试我的Rails项目:未定义的方法`mass_assignment_sanitizer ='为ActiveRecord :: Base:Class(NoMethodError)

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) 

我试着重新安装rspecchanging my Gemfile,但没有姑息未定义的方法错误!

+0

哦,另外,当我尝试运行'rspec spec /'时,我得到一个'command not found'错误。 – 2011-12-27 16:49:45

+0

尝试不用斜杠。 'rspec spec'。 (*只是想*) – 2011-12-27 16:51:00

+0

不幸的是我仍然没有斜杠得到相同的错误。 – 2011-12-27 16:54:33

回答

69

您是否从Rails 3.2 RC1降级?从您的development.rb注释掉以下两行:

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

从3.2降级到3.1.2后,这对我来说非常合适! – 2012-03-22 10:56:30

+2

自使用rspec的TS以来,他应该在test.rb中注释掉该行而不是development.rb – henghonglee 2012-08-03 03:42:09

+2

从Rails 3.2升级到4.2时出现同样的问题并进行修复 – andrewcockerham 2015-12-12 23:29:58

1

虽然M818的回答就能解决问题,你可能仍然得到错误,如果你是tyring在代码中的其他地方使用过时的方法。

我有同样的问题,注释掉这些行摆脱了一些错误,但不是所有的人,我使用的任何地方attr_accessible给了我同样的错误。

原来是'active_record'宝石,当我不希望它更新到4.0时。由于我使用的是Padrino的应用程序,我不得不这样做在的Gemfile:

gem 'activerecord', '= 3.2.12', :require => "active_record" 

这解决了所有问题,我没有在database.rb注释掉线。

相关问题