1个用户模型与学生,导师角色+不同的学生,导师的个人资料?

时间:2013-11-30 12:25:08

标签: activerecord ruby-on-rails-4 polymorphic-associations

如何正确设置具有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

1 个答案:

答案 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

然后为每种类型的配置文件创建一个单独的模型。

通过使用此“类型”列,您可以使学生和导师继承用户的所有方法和属性,但也可以拥有自己独特的属性和方法。