如何解决如何在 Ruby 继承的父方法中获取子类?
我正在用 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,: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 时的结果
我现在正在学习如何编码,这是课程给我的问题。我知道可能有更简单的方法可以做到这一点,但我可能还没有学会这些。
解决方法
在像您的 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。