2016-12-15 9 views
0

異なるユーザータイプの異なるモデルを使用しています。複数のモデルを一元化したユーザーIDトラッキング

は、各モデルは、IDフィールド、それぞれstudent_idteacher_idを持つことになりますStudentTeacher 二つのモデルが存在すると仮定します。

これらのIDフィールドは両方とも1で始まり、互いに依存しません。

だから、最初の先生と最初の生徒が同じIDを持つことになり、student_id1teacher_idだろうが1

だろう今私は、ユーザーが、その後1のIDを持っている場合は、なるように工夫を変更したいですそれ以降に作成された教師はそれを考慮に入れてIDが2(1ではなく)である必要があります。

これは、2つのIDが同じではないため、(任意のタイプの)各ユーザーを個別に識別するのに役立ちます。

また、deviseを設定する代わりに結果を得る方法はありますか?

答えて

0

私は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の例を好むだろう。

+0

ありがとう:)私はそれに出くわしましたが、私のアプリは2つの別々のモデルを使用しています。私のアプリケーションでは、問題を解決するためのより良い選択肢と思われた。だから、私は2つの別々のモデルで具体的に何かを探しています。 –

+0

私は自分の答えを編集しました。あなたが問題を解決するための組み込みの方法を提供しないことを私が見ている限り、自分で解決する必要があります。 – Klaus

関連する問題