2016-06-18 12 views
0

私はクラスUserを持ち、サブクラスはAdminとStudentです。単一テーブル継承(STI)を使用したサブクラスの作成

追加の専用列が必要です。私がRuby on RailsでSTIを使ってこれをどうやって行うことができるか教えてください。

ありがとうございます!

さらに、usersテーブルにデータを設定するにはどうすればよいですか?

答えて

1

通常、あなたはUserクラスにtypeの列を持っています。あなたがRailsのSTIを利用して、まだ柔軟にあなたのサブクラスのメソッドを作成することができ

class User 

end 

class Admin < User 

end 

class Student < User 

end 

この方法:今すぐあなたのサブクラスでは次のようなUserクラスから継承したいです。

しかしそれを整理ビットを維持するために、あなたのクラスを使用するために今、このような

#models/users/admin.rb 
module Users 
    class Admin < User 

    end 
end 

#model/users/student.rb 
module Users 
    class Student < User 

    end 
end 

として、お使いのモデルの下でフォルダ内のサブクラスを置くことができ、あなたがしたいより多くの情報にhere

を探します応答トンでUsers::Student.find(id)

UPDATE

を行いますoコメント、私は学生に特有のコラムについては、あなたがより良い協会、例えばStudent.has_one :gradeとか何かのものを提供する方が良いと思います。この方法で、あなたのユーザーオブジェクトを正常に抽象化して共通ユーザーメソッド。しかしStudentAdmin の行を作成するために、あなたはUsers::Student.create(params)Users::Admin.create(params)を行うことができ、RailsはSTIと

+0

感謝を対処する方法を知っているが、私の質問は、私が学生に固有の列(「グレード」と言う)どのように行うのですか?また、Student and Adminの行を作成するにはどうしたらいいですか? – user1175969

+0

私はちょうどこれを反映する答えを更新しました – oreoluwa

+0

ありがとう! StudentがUserのサブクラスであり、「grade」と呼ばれる別の列を持つことも可能ですか?彼らは同じテーブルを共有しますか? – user1175969

関連する問題