我正在用 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.class
是 Class
),因此您想查看 self.name
:
class ModelBase
def self.find_by_id(id)
p name
end
end
关于sql - 如何在Ruby中继承父方法中获取子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66402704/