【问题标题】:uninitialized constant Buyer (NameError) Ruby on Rails未初始化的常量买家 (NameError) Ruby on Rails
【发布时间】:2016-07-10 02:34:47
【问题描述】:

我不明白为什么我总是收到错误

未初始化的常量Buyer (NameError)

当我创建子类Buyer 时,我尝试运行puts buyer1.run,但它不起作用。我不明白在尝试为父类创建子类时我做错了什么。

class User

  def initialize(name)
     @name = name
  end

  def run
    puts "i am running"
  end

  class Buyer < User
  end

  def get_name
    @name
  end


end

user = User.new("mike")
buyer1 = Buyer.new("jack")
puts buyer1.run
puts user.get_name
puts user.run

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    试试这个:

    class User
    
      def initialize(name)
         @name = name
      end
    
      def run
        puts "i am running"
      end
    
      class Buyer < User
      end
    
      def get_name
        @name
      end
    
    end
    
    class Buyer < User 
      # instantiate the Buyer class outside of the User class
    end
    
    user = User.new("mike")
    buyer1 = Buyer.new("jack")
    puts buyer1.run
    puts user.get_name
    puts user.run
    

    虽然 potashins 的回答提供了丰富的信息,但您对代码的上述更改将帮助您更准确地了解您在此处使用继承所做的工作。

    在User类之外实例化Buyer类,并用

    【讨论】:

      【解决方案2】:

      由于Buyer 类是在User 类中定义的(这很奇怪,但允许您将get_name 方法用于User 实例):

      buyer1 = User::Buyer.new("jack")
      

      Demonstration

      【讨论】:

      • STI 子类应该独立存在,而不是隐藏在另一个中。将它们放在奇怪的地方会使自动加载器感到困惑。至少这应该在user/buyer.rb 中,但更好的是把它放在根目录下,只需将buyer.rb 放在models 中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多