如何正确设置具有2个角色的用户模型,并为每个角色分别设置2个配置文件模型?我对如何实施感到困惑。目前我正在使用它,但它失败了:
模型/ user.rb
# id :integer ( only important columns noted to save space)
# profile_id :integer
# profile_type :string(255)
belongs_to :profile, :polymorphic => true
模型/ profile_student.rb:
# user_id :integer
has_one :user, as: :profile, dependent: :destroy
模型/ profile_tutor.rb:
# user_id :integer
has_one :user, as: :profile, dependent: :destroy
如何正确获取用户的个人资料? 例如使用设计。
@user = current_user.profile
答案 0 :(得分:1)
我会尝试两种类型的用户:学生和导师。为了做到这一点,在你的用户表中,有一个名为type的列,并进行验证,确保它是学生或导师:
validates :type, :inclusion => {:in => ['student', 'tutor']}
然后创建学生模型和教师模型。在rails中,'type'是一种特殊的属性,rails会知道它指的是其他模型。然后,为了制作配置文件,您有两个选择。您可以说学生和导师都是has_one:个人资料,或者您可以将个人资料类型分开。
例如,你可以这样做:
class Student < User
has_one :profile
end
class Tutor < User
has_one :profile
end
如果两个配置文件都有类似的信息类型,那么这可能对您有用。但是,如果导师和学生的个人资料截然不同,请尝试以下方式:
class Student < User
has_one :student_profile
end
class Tutor < User
has_one :tutor_profile
end
然后为每种类型的配置文件创建一个单独的模型。
通过使用此“类型”列,您可以使学生和导师继承用户的所有方法和属性,但也可以拥有自己独特的属性和方法。