STI:用户有多个子类ID。(我希望用户只有一个子类ID)

时间:2012-03-21 14:03:26

标签: ruby-on-rails ruby sti

我正在尝试使用STI,因为我想为设备使用单点登录页面。我想将teacher_idstudent_id分配给user,但事实证明所有user都有class User < ActiveRecord::Base ... DEFAULT_ROLE = 'Student' after_create :set_role attr_accessible ..., :role has_one :role ... private def set_role self.role ||= Role.find_by_name(DEFAULT_ROLE) end ... end class Student < User has_many :bookings end Class Teacher < User has_many :bookings end class Role < ActiveRecord::Base validates :name, :presence => true belongs_to :user end Class Booking < ActiveRecord::Base attr_accessible :student_id, :teacher_id belongs_to :teacher, :class_name => 'Teacher' belongs_to :student, :class_name => 'Student' ... class CreateBookings < ActiveRecord::Migration def change create_table :bookings do |t| t.integer :student_id t.integer :teacher_id t.date :booking_date t.time :booking_time t.timestamps end end end 。我该如何解决这个问题?以下是模型和迁移。

{{1}}

1 个答案:

答案 0 :(得分:0)

看起来您需要将User的“角色”部分分离为单独的对象,然后允许用户拥有多个角色。有时这些被称为“配置文件”,因为它们实际上是指呈现用户的方式。

然后,您可以使用用户模型作为代理来访问您要测试配置文件存在的这些内容:

if (user.teacher)
  # ...
else
  flash[:notice] = "You must be a teacher to perform this operation."
end