1

ルート.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

モデル 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

モデルの学生.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

疑問に思う

基本的に私がやっていることは、deviseユーザーモデルを生成することです.STIを介して、ユーザーモデルから生徒と教師を継承しています.ユーザーモデルとOneToOneの関係を持つUserProfileモデルも作成しました。 UserProfile モデルは、 avatar 、 first name 、 last name 、 institute id などのすべての共通フィールドを持つように生成されます。

3つ疑問があります

最初に、 current_userdevise によって提供されるセッション変数の使用を実装する簡単な方法はありますか?両方の変数を 1 つの共通変数に置き換えるcurrent_teachercurrent_student

2番目に、新しいユーザーを作成すると、新しいuser_profileが作成されますが、新しい学生を作成して確認するsomestudent.user_profileと、nilが返されます

3番目に、私のニーズを正確に満たし、探しているものを実装するためのSTIまたはcancanロールの優れた実装はありますか?

助けてください、事前に感謝します

4

0 に答える 0