Ruby on rails Ruby:未初始化的未定义方法
注意:有许多答案说明,当您将Ruby on rails Ruby:未初始化的未定义方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,注意:有许多答案说明,当您将ActiveRecord::Base子类化并添加#initialize而不使用super时,可能会出现此错误。没有答案可以解释实际发生的情况 我在其他人的代码中工作,我在Rails应用程序中有一个HttpParty服务,具有以下类层次结构。注意子类#initialize与父类具有不同的签名 module A class Base include HTTParty ... end end module A class User < B
ActiveRecord::Base
子类化并添加#initialize
而不使用super
时,可能会出现此错误。没有答案可以解释实际发生的情况
我在其他人的代码中工作,我在Rails应用程序中有一个HttpParty服务,具有以下类层次结构。注意子类#initialize
与父类具有不同的签名
module A
class Base
include HTTParty
...
end
end
module A
class User < Base
def initialize(user)
@user = user
end
end
end
module A
class PublicUser < User
def initialize(opts = {})
@limit = opts[:limit]
# no call to super
end
end
end
模块A
阶级基础
包括HTTParty
...
结束
结束
模块A
类用户
这在本地是没有问题的,但在SemaphoreCI中有以下结果:
A::PublicUser.new(limit: 1).some_method
undefined method `some_method' for #<A::PublicUser not initialized>
A::PublicUser.new(限制:1).一些方法
未定义的方法“某些方法”#
我找不到有关“未初始化”消息的任何文档。是什么导致这种失败的?好的,我知道了。我还为你的问题加了一个标签,因为普通好的ruby很少会有这样奇怪的行为 您经历了两个不同的问题,或多或少是不相关的
#关于A::PublicUser
。因此,ruby试图格式化一条错误消息,瞧,类就是这样打印出来的
A::Base
名称与ActiveRecord::Base
冲突,猜猜当满足类用户
时解决了什么问题。要复制这种行为,您可以打开控制台并执行以下操作:classq
,导致#。(你已经像我一样喜欢Rails了吗?)类用户
或将Base
重命名为MyBase
。很抱歉这么说这是纯ruby还是rails?导致错误的类都是纯ruby。但它是在Rails应用程序中调用的。您明确要求所有文件吗?我没有。我相信这个问题会返回一个“NameError:uninitialized constant X”错误。@coreyward为什么要删除标记,尽管事实是rails破坏了一切,并产生了那个愚蠢的错误消息?好吧,这告诉了我我的代码是怎么回事,但我仍然不理解更普遍的情况。也许你的第一点是涵盖这一点。对
.new
的调用是否失败,是否调用了inspect
。。。什么?我相信,对new
的调用并没有失败,而是创建了ActiveRecord::Base
类的一个子类,而这个类又缺少some_method
method.Hm。“未初始化”是调用不是初始化对象中的键的方法时发生的ActiveRecord错误?(或某事)“未初始化”不是错误。“未初始化”是由rails.interest生成的愚蠢的inspect
输出。你能在回答中加上这个吗?我不知道你为什么被否决,我想这给了我我需要的信息。