路线.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
模型用户.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
模型学生.rb
class Student < User
end
模范教师.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 我从用户模型继承学生和教师,我还创建了一个与用户模型具有 OneToOne 关系的 UserProfile 模型,因此也与学生和教师模型建立了关系,生成 UserProfile 模型以包含所有常见字段,例如头像、名字、姓氏、机构 ID 等。
我有3个疑问
首先,是否有任何更简单的方法来实现 devisecurrent_user
提供的会话变量的使用,在这种情况下,将有两个会话变量,一个用于教师,一个用于学生,例如current_teacher
和current_student
,所以我的问题是,有没有办法只是用一个公共变量替换两个变量
其次,当我创建一个新用户时,会创建一个新的 user_profile,但是当我创建一个新学生并检查somestudent.user_profile
时,它返回 nil
第三,STI 或 cancan 角色是否有任何很好的实现来完全满足我的需求并实现我正在寻找的东西?
请帮忙,提前谢谢