sql - 如何在Ruby中继承父方法中获取子类?

标签 sql ruby inheritance parent-child super

我正在用 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 时的结果

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

最佳答案

在像 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

关于sql - 如何在Ruby中继承父方法中获取子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66402704/

相关文章:

sql - 如何在SQL中实现这种双重联接?

mysql - SQL返回单行内连接

iOS 如何在不子类化所有内容的情况下为类引入具有 UDID 的能力?

javascript - ES6 类原型(prototype) - 类型解析

c++ - 为什么我们需要 base-to-member 习语?

php - MYSQL 获取最近的记录,然后在 where 子句中验证它的状态

mysql在where子句中拆分字符串

mysql - ActiveRecord - 非法混合排序规则

ruby-on-rails - Ruby on Rails form_with 未显示错误,卡在服务器端

ruby - 链接到 ruby​​ 中的外部文件?