私は1つのモデルのみを使用します。ユーザー。
私は例えばUSER_TYPE、列挙型を追加することになり、すべてのユーザーのもの(名前、メールアドレスなど)への追加
:
enum user_type: [ :teacher, :student ]
あなたの移行が好きにこの例を見てshoul:
def change
create_table :users do |t|
t.string :email, null: false
t.string :first_name
t.string :last_name
t.string :password_digest, null: false
t.integer :user_type, null: false
t.timestamps null: false
end
end
列挙型を使用すると、users.teacher.all
の教師とusers.student.all
の生徒を見つけることができます。
すべてのユーザーは同じテーブルに格納されており、必要に応じてuser_typesを追加できます。データベースで
すべての教師がUSER_TYPE列に0を持つことになりますが、より多くのUSER_TYPESを追加した場合、学生は、例えばゲストを1
を持つことになり、あなたのモデルは
enum user_type: [ :teacher, :student, :guest ]
のように見え、すべてのゲストはuser_type列に2を持ちます。あなたは本当にあなたがあなた自身のメソッドを記述する必要が2つの異なるモデルを使用したい場合には
:モデルで列挙型について
詳細はrails api
EDITに記載されています。
非常に簡略化さ:第二の私の意見で
Student.create(id: Student.next_id, name: 'John'....)
を:
def next_id
Student.last.id > Teacher.last.id ? Student.last.id + 1 : Teacher.last.id +1
end
は、両方のモデルでは、このメソッドを含める(多分あなたは懸念を使用したい)とレコードを作成するときにNEXT_IDを使用方法は扱いにくいようです。私はいつもenumの例を好むだろう。
ありがとう:)私はそれに出くわしましたが、私のアプリは2つの別々のモデルを使用しています。私のアプリケーションでは、問題を解決するためのより良い選択肢と思われた。だから、私は2つの別々のモデルで具体的に何かを探しています。 –
私は自分の答えを編集しました。あなたが問題を解決するための組み込みの方法を提供しないことを私が見ている限り、自分で解決する必要があります。 – Klaus