Ruby on rails 4 为什么这些模型和方法使我的服务器/堆栈级别崩溃得太深?
我是RubyonRails的新手,一直试图慢慢理解一切是如何工作的,但现在我遇到了麻烦 我有模型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
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