0

我正在尝试使用 STI,因为我想对设备使用单点登录页面。我想将其中一个teacher_id或分配student_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
4

1 回答 1

0

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

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

if (user.teacher)
  # ...
else
  flash[:notice] = "You must be a teacher to perform this operation."
end
于 2012-03-21T14:58:08.877 回答