rails handling设计多个用户

时间:2012-10-20 22:02:28

标签: devise ruby-on-rails-3.2 cancan sti

的routes.rb

  get "main/index"
  match "profile" => "main#profile"
  match "account" => "main#account"
  match "subjects" => "main#subjects"
  match "messages" => "main#messages"
  match "homework" => "main#homework"
  devise_for :students,:teachers

的应用程序/模型/ user_profile.rb

class UserProfile < ActiveRecord::Base
  attr_accessible :first_name, :gender, :institute_id, :last_name, :new_lesson, :new_messages, :user_type, :year,:avatar
  has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" },:default_url => '/assets/default_avatar.png'
  belongs_to :user 
end

model user.rb

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  attr_accessible :email, :password, :password_confirmation, :remember_me , :user_profile_attributes
  has_one :user_profile
  accepts_nested_attributes_for :user_profile
end

model student.rb

class Student < User
end

model teacher.rb

class Teacher < User
end

用户迁移

class AddTypeToUsers < ActiveRecord::Migration
  def change
    add_column :users, :type, :string
  end
end

user_profile

的迁移
class CreateUserProfiles < ActiveRecord::Migration
  def change
    create_table :user_profiles do |t|
      t.string :first_name
      t.string :last_name
      t.integer :user_type
      t.integer :gender
      t.integer :year
      t.integer :institute_id
      t.integer :new_messages
      t.integer :new_lesson
      t.integer :user_id
      t.timestamps
    end
  end
end

疑问

基本上我正在做的是,生成一个设计用户模型,然后通过STI我从用户模型继承学生和教师,我还创建了一个UserTrofile模型,其中OneToOne关系与用户模型,因此也与学生和教师模型,生成UserProfile模型,以包含所有常用字段,如头像,名字,姓氏,机构ID等。

我有3个疑惑

首先,有没有更简单的方法来实现设计提供的current_user会话变量的使用,在这种情况下会有两个会话变量,一个用于教师,一个用于学生,例如current_teachercurrent_student,所以我的问题是,有没有办法只用一个公共变量替换这两个变量

第二,当我创建一个新用户时,会创建一个新的user_profile,但是当我创建一个新学生并且我检查somestudent.user_profile时,它会返回nil

第三,STI或cancan角色有没有很好的实现来完全满足我的需求并实现我想要的东西?

请提前帮助,请提供帮助

0 个答案:

没有答案