Rubyの継承された親メソッドでChildクラスを取得するにはどうすればよいですか?

チャド・カニンガム

私は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]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++の継承されたクラスで通常のメソッドを静的メソッドに変更するにはどうすればよいですか?

分類Dev

EasyMockで抽象クラスから継承されたメソッドをモックするにはどうすればよいですか?

分類Dev

PHPのクラス継承で親メソッドのみを実行するにはどうすればよいですか?

分類Dev

親クラスが同じconstフィールドを持つ継承されたメソッドで、子クラスのconstフィールドを使用するにはどうすればよいですか?

分類Dev

Groovyで継承されたメソッドなしでクラスのすべてのメソッド名を取得するにはどうすればよいですか?

分類Dev

Grails [Groovy]、継承されたメソッドなしでクラスが持つすべてのメソッドのリストを取得するにはどうすればよいですか?

分類Dev

defaultdictを継承し、そのコピーメソッドをサブクラスメソッドで使用するにはどうすればよいですか?

分類Dev

Pythonで継承されたクラスではなく、現在のクラスのインスタンスを返すようにメソッドを定義するにはどうすればよいですか?

分類Dev

Sphinxドキュメントでクラスの継承されたメンバーを表示するにはどうすればよいですか?

分類Dev

Python 2で継承せずに別のクラスのメソッドを再利用するにはどうすればよいですか?

分類Dev

継承されたメソッドをオーバーライドする代わりに拡張するにはどうすればよいですか?

分類Dev

親クラスのすべての機能を継承するにはどうすればよいですか?

分類Dev

Java:継承されたクラスからオブジェクトを取得するgetterメソッドを作成するにはどうすればよいですか?

分類Dev

Java:継承されたクラスからオブジェクトを取得するgetterメソッドを作成するにはどうすればよいですか?

分類Dev

同じメソッドと継承で2つのクラスを作成するにはどうすればよいですか?

分類Dev

子クラスで継承されたメソッドをどのように装飾しますか?

分類Dev

Odooの純粋なPythonクラスから継承してメソッドを変更するにはどうすればよいですか?

分類Dev

階層の親クラスのメソッドを使用するにはどうすればよいですか?

分類Dev

親クラスを継承された子クラスに休止状態でダウンキャストするにはどうすればよいですか?

分類Dev

継承メソッドで使用されているクラスの関数を使用後にリセットまたは置換するにはどうすればよいですか?

分類Dev

クラス内でデコレータを宣言して、すでに装飾された継承されたメソッドを装飾するにはどうすればよいですか?

分類Dev

クラス(Ruby)のメソッドで名前を表示するにはどうすればよいですか?

分類Dev

Proguardのメソッドとクラスによって削除されたリストを取得するにはどうすればよいですか?

分類Dev

継承されたクラスで親クラス変数の値を設定し、それを継承された関数で使用するにはどうすればよいですか?

分類Dev

initメソッドの継承を禁止するにはどうすればよいですか?

分類Dev

継承されたクラスの変数が何かに等しいときにメソッドを実行するにはどうすればよいですか?

分類Dev

親クラス関数で継承されたオブジェクトを使用するにはどうすればよいですか?

分類Dev

継承で特定の基本クラスを取得するにはどうすればよいですか?

分類Dev

Pythonの `super()`からインスタンスメソッドの次の行の親クラスを取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    C ++の継承されたクラスで通常のメソッドを静的メソッドに変更するにはどうすればよいですか?

  2. 2

    EasyMockで抽象クラスから継承されたメソッドをモックするにはどうすればよいですか?

  3. 3

    PHPのクラス継承で親メソッドのみを実行するにはどうすればよいですか?

  4. 4

    親クラスが同じconstフィールドを持つ継承されたメソッドで、子クラスのconstフィールドを使用するにはどうすればよいですか?

  5. 5

    Groovyで継承されたメソッドなしでクラスのすべてのメソッド名を取得するにはどうすればよいですか?

  6. 6

    Grails [Groovy]、継承されたメソッドなしでクラスが持つすべてのメソッドのリストを取得するにはどうすればよいですか?

  7. 7

    defaultdictを継承し、そのコピーメソッドをサブクラスメソッドで使用するにはどうすればよいですか?

  8. 8

    Pythonで継承されたクラスではなく、現在のクラスのインスタンスを返すようにメソッドを定義するにはどうすればよいですか?

  9. 9

    Sphinxドキュメントでクラスの継承されたメンバーを表示するにはどうすればよいですか?

  10. 10

    Python 2で継承せずに別のクラスのメソッドを再利用するにはどうすればよいですか?

  11. 11

    継承されたメソッドをオーバーライドする代わりに拡張するにはどうすればよいですか?

  12. 12

    親クラスのすべての機能を継承するにはどうすればよいですか?

  13. 13

    Java:継承されたクラスからオブジェクトを取得するgetterメソッドを作成するにはどうすればよいですか?

  14. 14

    Java:継承されたクラスからオブジェクトを取得するgetterメソッドを作成するにはどうすればよいですか?

  15. 15

    同じメソッドと継承で2つのクラスを作成するにはどうすればよいですか?

  16. 16

    子クラスで継承されたメソッドをどのように装飾しますか?

  17. 17

    Odooの純粋なPythonクラスから継承してメソッドを変更するにはどうすればよいですか?

  18. 18

    階層の親クラスのメソッドを使用するにはどうすればよいですか?

  19. 19

    親クラスを継承された子クラスに休止状態でダウンキャストするにはどうすればよいですか?

  20. 20

    継承メソッドで使用されているクラスの関数を使用後にリセットまたは置換するにはどうすればよいですか?

  21. 21

    クラス内でデコレータを宣言して、すでに装飾された継承されたメソッドを装飾するにはどうすればよいですか?

  22. 22

    クラス(Ruby)のメソッドで名前を表示するにはどうすればよいですか?

  23. 23

    Proguardのメソッドとクラスによって削除されたリストを取得するにはどうすればよいですか?

  24. 24

    継承されたクラスで親クラス変数の値を設定し、それを継承された関数で使用するにはどうすればよいですか?

  25. 25

    initメソッドの継承を禁止するにはどうすればよいですか?

  26. 26

    継承されたクラスの変数が何かに等しいときにメソッドを実行するにはどうすればよいですか?

  27. 27

    親クラス関数で継承されたオブジェクトを使用するにはどうすればよいですか?

  28. 28

    継承で特定の基本クラスを取得するにはどうすればよいですか?

  29. 29

    Pythonの `super()`からインスタンスメソッドの次の行の親クラスを取得するにはどうすればよいですか?

ホットタグ

アーカイブ