Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 4 为什么这些模型和方法使我的服务器/堆栈级别崩溃得太深?_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 4 为什么这些模型和方法使我的服务器/堆栈级别崩溃得太深?

Ruby on rails 4 为什么这些模型和方法使我的服务器/堆栈级别崩溃得太深?,ruby-on-rails-4,Ruby On Rails 4,我是RubyonRails的新手,一直试图慢慢理解一切是如何工作的,但现在我遇到了麻烦 我有模型 class User < ActiveRecord::Base validates :username, {:uniqueness => true, :presence => true} validates_presence_of :password_digest, :on => :create has_one :player, dependent: :de

我是RubyonRails的新手,一直试图慢慢理解一切是如何工作的,但现在我遇到了麻烦

我有模型

class User < ActiveRecord::Base
   validates :username, {:uniqueness => true, :presence => true}
   validates_presence_of :password_digest, :on => :create
   has_one :player, dependent: :destroy
   has_secure_password
   has_many :planets, through: :player
end

class Player < ActiveRecord::Base
  has_many :planets, dependent: :destroy
  belongs_to :user

  validates_presence_of :race, on: :create
end

class Planet < ActiveRecord::Base
  belongs_to :player
end
在@current_user.player.players.create-generate_属性上,我的服务器完全崩溃。以前,当我从玩家中删除“属于:用户”和“从星球上删除“属于:玩家”时,我会得到一个堆栈级别太深的异常

很明显,我做错了一些可怕的事情,但我不知道是什么。我试图调试,但一旦我到达rails源代码中的某个点,我的调试器就会断开连接,我必须强制服务器停止


如果您有任何见解,我们将不胜感激。

根据您的
生成属性
方法,您的
星球
模型上可能有一个名为
的字段。这几乎肯定会导致您的问题,您需要使用与
类不同的名称

原因是在Ruby中,几乎所有东西都有一个类,例如:

>> "foo".class
# => String
>> User.first.class
# => User
但是,对于您的
Planet
型号,
class
被设置为字符串。Rails在类名中使用大量的内省来处理关联;因为您正在将这个
星球
链接到一个
玩家
,而
属于
,我假设Rails正在检查
星球
对象的类,以确保它是正确的,看到的是
“家庭世界”
而不是它预期的
星球
,并因此引发异常


(即使去掉了关联,使用
class
作为字段名仍然会遇到问题)。

我很惊讶这段代码能正常工作?您将当前用户分配到哪里?如果您已从另一个控制器(UserController)重定向到新控制器(PlayerController),则实例变量基本上都丢失了。我不知道为什么
@current_user.player
没有生成一个“method missing for Nil:Nilclass”是
星球上的一个字段
class
?@SteveTurczyn抱歉,这不是完整的代码。我在ApplicationController中有另一个方法,它使用before_过滤器运行,检查是否登录并获取用户。@DylanMarkow是的,它是。。。让我检查一下,改变它是否能修复它,尽管我怀疑它会修复它。这就修复了它。我早该知道的。谢谢你的帮助。
>> "foo".class
# => String
>> User.first.class
# => User