我为不同的用户类型使用不同的模型。
假设有两个模型,Student
和Teacher
每个模型都有一个ID字段,分别为student_id
和teacher_id
。
这两个ID字段都以1
开头,并且彼此不相关。
因此,第一位教师和第一位学生将拥有相同的ID,student_id
将是1
而teacher_id
将是1
现在我想修改设计,如果用户的ID为1
,那么之后创建的教师应该考虑它并且ID为2
(而不是1)
这有助于分别识别每个用户(任何类型),因为没有两个ID是相同的。
或者有没有其他方法来获得结果而不是配置设计?
答案 0 :(得分:0)
我只使用一种型号,例如用户。
除了所有用户资料(姓名,电子邮件等)之外,我还会添加枚举类型,例如user_type:
-=
你的移民应该看起来像这样的例子:
enum user_type: [ :teacher, :student ]
使用枚举类型,您可以找到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
的学生。
所有用户都存储在同一个表中,如果需要,您可以添加更多user_types。
在您的数据库中,所有教师的user_type列中都有一个0,学生将有一个1.
如果您添加更多user_types,例如来宾,您的模型就像
users.student.all
并且所有访客在user_type列中都有2,依此类推。
中介绍了有关模型中枚举的更多信息编辑:
如果你真的想要使用两种不同的模型,你必须编写自己的方法。
非常简化:
enum user_type: [ :teacher, :student, :guest ]
在两个模型中包含此方法(可能您想使用问题)并在创建记录时使用next_id:
def next_id
Student.last.id > Teacher.last.id ? Student.last.id + 1 : Teacher.last.id +1
end
在我看来,第二种方式似乎很尴尬。我总是喜欢枚举的例子。