【问题标题】:How to get Child class in inherited parent method in Ruby?如何在Ruby的继承父方法中获取子类?
【发布时间】:2021-02-27 19:30:41
【问题描述】:

我正在用 Ruby 为 SQL 数据库编写类,一些查询方法在我的所有类中都很常见,所以我想将这些方法移到父类中。我不知道如何让原始类调用显示在父类中。由于我的类是我的表的名称,因此我需要它们能够在我的父方法中访问它们。我试过使用 self.class 但它只返回 Class,而不是我使用该方法的实际类。

这是我要移入父类的代码:

require_relative 'questions_databse.rb'

class User
  attr_accessor :id, :fname, :lname

  def self.find_by_id(id)
    user = QuestionDatabase.instance.execute(<<-SQL, id)
     SELECT
       *
     FROM
       users
     WHERE
       users.id = ?
    SQL
    user.map { |user| User.new(user) }.first
end

现在我需要做的是这样的:

require_relative 'questions_databse.rb'
require_relative 'modelbase.rb'

class User < ModelBase
  attr_accessor :id, :fname, :lname

  # no self.find_by_id(id)

然后我希望父类做这样的事情:

require 'active_support/inflector'

class ModelBase  
  def self.find_by_id(id)
    object = QuestionDatabase.instance.execute(<<-SQL, id)
      SELECT
        *
      FROM
        #{self.chid_class.name.tableize}
      WHERE
        #{self.chid_class.name.tableize}.id = ?
    SQL
    object.map { |object| self.child_class.new(object) }.first
  end
end

我有 4 个其他表类使用此方法,因此我需要能够让代码准确说明调用它的类,以便 SQL 查询能够正常运行。

require 'active_support/inflector'

class ModelBase  
  def self.find_by_id(id)
    p self.class.name
  end
end

User.find_by_id(1) #=> "Class"

这是我使用 self.class.name 时的结果

我现在正在学习如何编码,这就是课程给我的问题。我知道可能有更简单的方法可以做到这一点,但我可能还没有学会。

【问题讨论】:

    标签: sql ruby inheritance parent-child super


    【解决方案1】:

    在像你的find_by_id这样的类方法中:

    class ModelBase  
      def self.find_by_id(id)
        p self.class.name
      end
    end
    

    self 是类本身(所以self.classClass)所以你想看看self.name

    class ModelBase  
      def self.find_by_id(id)
        p name
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多