创建记录时获取 "undefined method `[]' for nil:NilClass"

Getting "undefined method `[]' for nil:NilClass" when creating record

我正在将一个旧的 Rails 3 应用程序移植到 Rails 4.0.15 并且一切似乎都很顺利,除了每当我尝试创建记录时(即使在 Rails控制台)我收到上述错误(nil:NilClass 的未定义方法'[]')。

我在这里把事情简单化了一点,但我所做的是创建一个新的应用程序 (rails new xxxx) 然后从旧的复制 app/db/ 树.我使用了相同的数据库。 routes.rb 和 Gemfile 已手动调整。

其中一个型号是联系人:

class Contact < ActiveRecord::Base
  attr_accessible :name, :email, :phone, :address
end

rails console 中,当我输入 Contact.create 时得到以下信息:

Loading development environment (Rails 4.1.5)
irb(main):001:0> Contact.create
NoMethodError: undefined method `[]' for nil:NilClass
    from /usr/share/gems/gems/activerecord-4.1.5/lib/active_record/attribute_methods/read.rb:113:in `block in read_attribute'
    from /usr/share/gems/gems/activerecord-4.1.5/lib/active_record/attribute_methods/read.rb:111:in `fetch'
    from /usr/share/gems/gems/activerecord-4.1.5/lib/active_record/attribute_methods/read.rb:111:in `read_attribute'
    from /usr/share/gems/gems/activerecord-4.1.5/lib/active_record/attribute_methods/primary_key.rb:19:in `id'
    from /usr/share/gems/gems/activerecord-4.1.5/lib/active_record/transactions.rb:344:in `remember_transaction_record_state'
    from /usr/share/gems/gems/activerecord-4.1.5/lib/active_record/transactions.rb:282:in `rollback_active_record_state!'
    from /usr/share/gems/gems/activerecord-4.1.5/lib/active_record/transactions.rb:267:in `save'
    from /home/wucolin/.gem/ruby/gems/protected_attributes-1.0.3/lib/active_record/mass_assignment_security/persistence.rb:46:in `create'
    from (irb):1
    from /usr/share/gems/gems/railties-4.1.5/lib/rails/commands/console.rb:90:in `start'
    from /usr/share/gems/gems/railties-4.1.5/lib/rails/commands/console.rb:9:in `start'
    from /usr/share/gems/gems/railties-4.1.5/lib/rails/commands/commands_tasks.rb:69:in `console'
    from /usr/share/gems/gems/railties-4.1.5/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
    from /usr/share/gems/gems/railties-4.1.5/lib/rails/commands.rb:17:in `<top (required)>'
    from bin/rails:8:in `require'
    from bin/rails:8:in `<main>'

最好的情况:我希望有人会看到这个然后去"Yeah, that's easy to fix. All you do is..."

但是,如果有人能指出正确的方向或从哪里开始,我会很高兴。

谢谢大家抽出时间。

"attr_accessible" 功能在 Rails 中消失了 4. 我建议不要使用 gem,已经有很多问题报告了。

而不是将 "protected" 推入 Rails 4,安装 strong_parameters gem 并向后移植 Rails 中的强参数功能 3.

这绝对是一种更合适的方法。