我应该在继承自其他模型的模型上使用new或edit操作

时间:2015-08-06 23:01:35

标签: ruby-on-rails ruby-on-rails-4 inheritance devise sti

我有以下型号:

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

class Teacher < User 
end

class Student < User 
end

用户通过创建用户的设备表单登录。我希望有两种类型的配置文件,如老师和学生,但它们也可以同时使用。

因此,当我去创建一位新教师时,我只需要teachers/id/edit表单并更新继承自用户的教师。我应该这样做还是可以去teacher/new?当我的模型像我一样继承时,从那里创建一个老师?

1 个答案:

答案 0 :(得分:0)

不要在这里使用继承。创建单独的TeacherProfileStudentProfile表,并进行一对一关联:

class TeacherProfile
  belongs_to :user
end

class StudentProfile
  belongs_to :user
end

class TeacherProfile
  has_one :teacher_profile
  has_one :user_profile
end

然后按照标准协议进行操作。直接转到edit,检查配置文件是否存在,如果不存在则创建它,如下所示:

def edit
  @profile = TeacherProfiler.where(user: current_user).first_or_create
end