创建记录时获取 "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.
这绝对是一种更合适的方法。
我正在将一个旧的 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.
这绝对是一种更合适的方法。