Ruby on rails 未定义的方法“[]';for nil:NilClass for Rails模型
我有一个模范学生和一个管理员学生。在控制器中,我有一个新方法Ruby on rails 未定义的方法“[]';for nil:NilClass for Rails模型,ruby-on-rails,ruby,activerecord,ruby-on-rails-4,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 4,我有一个模范学生和一个管理员学生。在控制器中,我有一个新方法 def新建 @student=student.new 结束 然后我有一个/views/students/new.html.haml,它通过使用@student来吓坏我。我得到了错误 undefined method `[]' for nil:NilClass 这是最合适的 %h1 Students#new %p Find me in app/views/students/new.html.haml = form_for(@
def新建
@student=student.new
结束
然后我有一个/views/students/new.html.haml,它通过使用@student来吓坏我。我得到了错误
undefined method `[]' for nil:NilClass
这是最合适的
%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"
如果我用student.new替换@student,我会得到相同的结果
但是,如果我启动新服务器并使用
= Student.new
我将得到这个输出
#<Student:0x007fdf7a9c0778>
/Users/daltonick/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/webrick/server.rb:295:in'block in start_thread'
Started POST "/__better_errors/70107129930940/variables" for 127.0.0.1 at 2014-01-22 20:53:51 -0600
学生模型
class Student < ActiveRecord::Base
end
运行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!
您正在使用
t.string:class
@student.class
需要返回student
,以便ActiveRecord发挥其魔力
您的
@student.class
将返回nil
。这是个问题。为什么要在Student
中添加class
属性class
是一个Ruby关键字:someobject。class
返回someobject
的类。您添加了一个同名的属性,破坏了该逻辑。将属性类的名称更改为其他名称。从视图中调用@student
请显示新的.html.haml。这是否会将块传递给student.new
而不是表单?可能应该将该方法调用包装在parens中。我将Student.new包装在括号中,得到了相同的结果。这就是你的全新的.html.haml?因为我很愚蠢。我正在浏览这个网站,它是以前的模型,我甚至没有想到它会干扰Rubys。现在,class修复了它,感谢您的帮助。class
是Ruby关键字,而不是Rails关键字。很抱歉,我写错了hurry@Jackson_Sandland不要更改.class
的行为。我觉得这很明显。
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
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!