私は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を使用した場合の結果です。
私は今コーディングの仕方を学んでいます、そしてこれはレッスンが私に与えている問題です。これを行うもっと簡単な方法があるかもしれないことは知っていますが、おそらくまだそれらを学んでいません。
あなたのようなクラスメソッドで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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加