Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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 Ruby:未初始化的未定义方法_Ruby On Rails_Ruby - Fatal编程技术网

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试图格式化一条错误消息,瞧,类就是这样打印出来的

  • Rails会让您感到困惑,也会让您不断查找
    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
    输出。你能在回答中加上这个吗?我不知道你为什么被否决,我想这给了我我需要的信息。