【发布时间】: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