如何在Ruby的继承父方法中获取Child class?
How to get Child class in inherited parent method in Ruby?
我正在为 Ruby 中的 SQL 数据库编写 classes,一些查询方法在我所有的 classes 中都很常见,所以我想将这些方法移动到父 class。我不知道如何让原始 class 调用显示在父 class 中。由于我的 classes 是我的 tables 的名称,我需要他们在我的父方法中访问它们。我试过使用 self.class 但只是 returns Class,而不是我正在使用的实际 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)
然后我希望父 class 做这样的事情:
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 个其他 table class 使用此方法,因此我需要能够让代码准确说明 class 调用它的内容,以便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 方法中:
class ModelBase
def self.find_by_id(id)
p self.class.name
end
end
self
是 class 本身(所以 self.class
是 Class
)所以你想看看 self.name
:
class ModelBase
def self.find_by_id(id)
p name
end
end
我正在为 Ruby 中的 SQL 数据库编写 classes,一些查询方法在我所有的 classes 中都很常见,所以我想将这些方法移动到父 class。我不知道如何让原始 class 调用显示在父 class 中。由于我的 classes 是我的 tables 的名称,我需要他们在我的父方法中访问它们。我试过使用 self.class 但只是 returns Class,而不是我正在使用的实际 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)
然后我希望父 class 做这样的事情:
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 个其他 table class 使用此方法,因此我需要能够让代码准确说明 class 调用它的内容,以便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 方法中:
class ModelBase
def self.find_by_id(id)
p self.class.name
end
end
self
是 class 本身(所以 self.class
是 Class
)所以你想看看 self.name
:
class ModelBase
def self.find_by_id(id)
p name
end
end