[英]undefined method `[]' for nil:NilClass for Rails model on new
I have a model Student and a controller Students. 我有一个模特学生和一个控制器学生。 In the controller I have a new method
在控制器中我有一个新方法
def new
@student = Student.new
end
I then have a /views/students/new.html.haml that freaks out by using the @student. 然后我有一个/views/students/new.html.haml使用@student吓坏了。 I get the error
我收到了错误
undefined method `[]' for nil:NilClass
This is the haml for it 这是它的haml
%h1 Students#new
%p Find me in app/views/students/new.html.haml
= form_for(@student) do |f|
= f.text_field :email
= f.button "Submit"
If I replace @student with Student.new I get the same results. 如果我用Student.new替换@student,我会得到相同的结果。
However if I start the server new and just use 但是如果我启动服务器new并且只是使用
= Student.new
I will get this output 我会得到这个输出
#<Student:0x007fdf7a9c0778>
If I go into the rails console I can mess around with Students and use Student.new and Student.all and etc. 如果我进入rails控制台,我可以乱用学生并使用Student.new和Student.all等。
Does anyone have any idea what's going on or what I'm doing wrong? 有谁知道发生了什么或我做错了什么?
Here is the error log from when I load localhost:3000/students/new 这是我加载localhost:3000 / students / new时的错误日志
Started GET "/students/new" for 127.0.0.1 at 2014-01-22 20:53:50 -0600
Processing by StudentsController#new as HTML
Completed 500 Internal Server Error in 1ms
NoMethodError - undefined method `[]' for nil:NilClass:
activerecord (4.0.2) lib/active_record/attribute_methods/read.rb:84:in `read_attribute'
activerecord (4.0.2) lib/active_record/attribute_methods/read.rb:59:in `__temp__36c6163737'
activerecord (4.0.2) lib/active_record/core.rb:171:in `initialize'
activerecord (4.0.2) lib/active_record/inheritance.rb:27:in `new'
app/controllers/students_controller.rb:3:in `new'
actionpack (4.0.2) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.0.2) lib/abstract_controller/base.rb:189:in `process_action'
actionpack (4.0.2) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.0.2) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (4.0.2) lib/active_support/callbacks.rb:383:in `_run__289605414020287583__process_action__callbacks'
activesupport (4.0.2) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.2) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (4.0.2) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.0.2) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
activesupport (4.0.2) lib/active_support/notifications.rb:159:in `block in instrument'
activesupport (4.0.2) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.0.2) lib/active_support/notifications.rb:159:in `instrument'
actionpack (4.0.2) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.0.2) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
activerecord (4.0.2) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.0.2) lib/abstract_controller/base.rb:136:in `process'
actionpack (4.0.2) lib/abstract_controller/rendering.rb:44:in `process'
actionpack (4.0.2) lib/action_controller/metal.rb:195:in `dispatch'
actionpack (4.0.2) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.0.2) lib/action_controller/metal.rb:231:in `block in action'
actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:48:in `call'
actionpack (4.0.2) lib/action_dispatch/journey/router.rb:71:in `block in call'
actionpack (4.0.2) lib/action_dispatch/journey/router.rb:59:in `call'
actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:680:in `call'
rack (1.5.2) lib/rack/etag.rb:23:in `call'
rack (1.5.2) lib/rack/conditionalget.rb:25:in `call'
rack (1.5.2) lib/rack/head.rb:11:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/flash.rb:241:in `call'
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/cookies.rb:486:in `call'
activerecord (4.0.2) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.0.2) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
activerecord (4.0.2) lib/active_record/migration.rb:369:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.0.2) lib/active_support/callbacks.rb:373:in `_run__3101080685994121215__call__callbacks'
activesupport (4.0.2) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.2) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/reloader.rb:64:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
better_errors (1.0.1) lib/better_errors/middleware.rb:84:in `protected_app_call'
better_errors (1.0.1) lib/better_errors/middleware.rb:79:in `better_errors_call'
better_errors (1.0.1) lib/better_errors/middleware.rb:56:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.2) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.2) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.0.2) lib/active_support/tagged_logging.rb:67:in `block in tagged'
activesupport (4.0.2) lib/active_support/tagged_logging.rb:25:in `tagged'
activesupport (4.0.2) lib/active_support/tagged_logging.rb:67:in `tagged'
railties (4.0.2) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/runtime.rb:17:in `call'
activesupport (4.0.2) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/static.rb:64:in `call'
rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
railties (4.0.2) lib/rails/engine.rb:511:in `call'
railties (4.0.2) lib/rails/application.rb:97:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
rack (1.5.2) lib/rack/content_length.rb:14:in `call'
rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
/Users/daltondick/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
/Users/daltondick/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
/Users/daltondick/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread' /Users/daltondick/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/webrick/server.rb:295:in,clock in start_thread'
Started POST "/__better_errors/70107129930940/variables" for 127.0.0.1 at 2014-01-22 20:53:51 -0600
Student model 学生模特
class Student < ActiveRecord::Base
end
I just generated this model not too long ago with rails g model Student
and then the controller with rails g controller Students
我不久前用
rails g model Student
和带有rails g controller Students
rails g model Student
的控制器生成了这个模型
My migration file looks like this: 我的迁移文件如下所示:
class CreateStudents < ActiveRecord::Migration
def change
create_table :students do |t|
t.string :email
t.string :first_name
t.string :last_name
t.string :major
t.string :semester
t.string :class
t.integer :availability
t.integer :status
t.timestamps
end
end
end
Running Student.new.email = "foo"
gives me 运行
Student.new.email = "foo"
给了我
SystemStackError: stack level too deep
from /Users/daltondick/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/irb/workspace.rb:86
Maybe IRB bug!
You're breaking things with t.string :class
你用
t.string :class
打破了一些东西
@student.class
needs to return Student
for ActiveRecord to do its magic. @student.class
需要返回Student
for ActiveRecord才能发挥其魔力。
Your @student.class
is going to return nil
. 你的
@student.class
将返回nil
。 That's a problem. 那是个问题。
Why have you added a class
attribute to Student
? 为什么要为
Student
添加一个class
属性? class
is a Ruby keyword: someobject.class
returns the class of someobject
. class
是一个Ruby关键字: someobject.class
返回类的someobject
。 You have added an attribute with same name, destroying this logic. 您添加了具有相同名称的属性,从而破坏了此逻辑。 Change the name of the attribute
class
to something else. 将属性
class
的名称更改为其他名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.