Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未定义的方法“[]';for nil:NilClass for Rails模型_Ruby On Rails_Ruby_Activerecord_Ruby On Rails 4 - Fatal编程技术网

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!