Rails 3.2 active_record / mass_assignment_sanitizer的未定义方法错误

时间:2012-01-26 20:35:21

标签: ruby-on-rails

我将rails从3.1升级到3.2并在我的environment / development.rb文件中添加了以下内容:

# Raise exception on mass assignment protection for Active Record models
config.active_record.mass_assignment_sanitizer = :strict

# Log the query plan for queries taking more than this (works
# with SQLite, MySQL, and PostgreSQL)
config.active_record.auto_explain_threshold_in_seconds = 0.5

添加在尝试启动服务器时返回此错误:

/User/oprogfrogo/.rvm/gems/ruby-1.9.2-p180@rails32/gems/railties-3.2.0/lib/rails/railtie
/configuration.rb:85:in `method_missing': undefined method `active_record' for 
#<Rails::Application::Configuration:0x00000101305e88> (NoMethodError)

当我删除它时,一切都很好。为什么会这样?

2 个答案:

答案 0 :(得分:3)

我发现了问题。我的应用程序最初设置为排除活动记录,只是一个非数据库支持的应用程序。

答案 1 :(得分:0)

很奇怪,但请查看method_missing中的lib/rails/railtie/configuration.rb方法。

def method_missing(name, *args, &blk)
  puts "in configuration.rb:method_missing" # <= try to add these debug lines
  puts name
  puts args
  if name.to_s =~ /=$/
      @@options[$`.to_sym] = args.first
  elsif @@options.key?(name)
    @@options[name]
  else
    super # <= 85 line
  end
end

我猜测name.to_s =~ /=$/应该是true但不是,它会检查以=结尾的方法。尝试在方法的开头添加一些调试日志,看看你是否可能在配置变量名中意外地包含了一些奇怪的字符。