Как установить Inviter с помощью драгоценного камня devise_inevitable в rails 4?

Я работаю над rails 4 и недавно установил гем devise_invitable. У меня есть модели «Студент» и «Учитель», в которых «Студент» получает приглашение от «Учителя», что означает, что «Учитель является приглашающим», а «Студент» - приглашенным.

Я добавил все необходимые столбцы в таблицу студентов следующим образом:

    t.string   "invitation_token"
    t.datetime "invitation_created_at"
    t.datetime "invitation_sent_at"
    t.datetime "invitation_accepted_at"
    t.integer  "invitation_limit"
    t.integer  "invited_by_id"
    t.string   "invited_by_type"
    t.integer  "invitations_count",      default: 0

Я вхожу через учетную запись учителя и теперь хочу пригласить ученика, когда я нажимаю на ссылку, чтобы пригласить ученика, она переходит по пути: «/students/invitation/new» и просит меня войти в систему как ученик, что не имеет смысла потому что я хочу пригласить ученика, тогда зачем мне входить в систему как ученик, даже если сеанс учителя уже существует, и он должен использовать объект учителя для приглашения ученика.

Я даже пытаюсь использовать код ниже, но он не работает:

class Teacher < ActiveRecord::Base
     include DeviseInvitable::Inviter
  end

Вот мои маршруты:

                    Prefix Verb   URI Pattern                           Controller#Action
        new_student_session GET    /students/login(.:format)             devise/sessions#new
            student_session POST   /students/login(.:format)             devise/sessions#create
    destroy_student_session DELETE /students/logout(.:format)            devise/sessions#destroy
           student_password POST   /students/password(.:format)          devise/passwords#create
       new_student_password GET    /students/password/new(.:format)      devise/passwords#new
      edit_student_password GET    /students/password/edit(.:format)     devise/passwords#edit
                            PATCH  /students/password(.:format)          devise/passwords#update
                            PUT    /students/password(.:format)          devise/passwords#update
cancel_student_registration GET    /students/cancel(.:format)            devise_invitable/registrations#cancel
       student_registration POST   /students(.:format)                   devise_invitable/registrations#create
   new_student_registration GET    /students/sign_up(.:format)           devise_invitable/registrations#new
  edit_student_registration GET    /students/edit(.:format)              devise_invitable/registrations#edit
                            PATCH  /students(.:format)                   devise_invitable/registrations#update
                            PUT    /students(.:format)                   devise_invitable/registrations#update
                            DELETE /students(.:format)                   devise_invitable/registrations#destroy
  accept_student_invitation GET    /students/invitation/accept(.:format) devise/invitations#edit
  remove_student_invitation GET    /students/invitation/remove(.:format) devise/invitations#destroy
         student_invitation POST   /students/invitation(.:format)        devise/invitations#create
     new_student_invitation GET    /students/invitation/new(.:format)    devise/invitations#new
                            PATCH  /students/invitation(.:format)        devise/invitations#update
                            PUT    /students/invitation(.:format)        devise/invitations#update
        new_teacher_session GET    /teachers/login(.:format)             devise/sessions#new
            teacher_session POST   /teachers/login(.:format)             devise/sessions#create
    destroy_teacher_session DELETE /teachers/logout(.:format)            devise/sessions#destroy
           teacher_password POST   /teachers/password(.:format)          devise/passwords#create
       new_teacher_password GET    /teachers/password/new(.:format)      devise/passwords#new
      edit_teacher_password GET    /teachers/password/edit(.:format)     devise/passwords#edit
                            PATCH  /teachers/password(.:format)          devise/passwords#update
                            PUT    /teachers/password(.:format)          devise/passwords#update
cancel_teacher_registration GET    /teachers/cancel(.:format)            devise_invitable/registrations#cancel
       teacher_registration POST   /teachers(.:format)                   devise_invitable/registrations#create
   new_teacher_registration GET    /teachers/sign_up(.:format)           devise_invitable/registrations#new
  edit_teacher_registration GET    /teachers/edit(.:format)              devise_invitable/registrations#edit
                            PATCH  /teachers(.:format)                   devise_invitable/registrations#update
                            PUT    /teachers(.:format)                   devise_invitable/registrations#update
                            DELETE /teachers(.:format)                   devise_invitable/registrations#destroy
           new_user_session GET    /users/login(.:format)                devise/sessions#new
               user_session POST   /users/login(.:format)                devise/sessions#create
       destroy_user_session DELETE /users/logout(.:format)               devise/sessions#destroy
              user_password POST   /users/password(.:format)             devise/passwords#create
          new_user_password GET    /users/password/new(.:format)         devise/passwords#new
         edit_user_password GET    /users/password/edit(.:format)        devise/passwords#edit
                            PATCH  /users/password(.:format)             devise/passwords#update
                            PUT    /users/password(.:format)             devise/passwords#update
   cancel_user_registration GET    /users/cancel(.:format)               devise_invitable/registrations#cancel
          user_registration POST   /users(.:format)                      devise_invitable/registrations#create
      new_user_registration GET    /users/sign_up(.:format)              devise_invitable/registrations#new
     edit_user_registration GET    /users/edit(.:format)                 devise_invitable/registrations#edit
                            PATCH  /users(.:format)                      devise_invitable/registrations#update
                            PUT    /users(.:format)                      devise_invitable/registrations#update
                            DELETE /users(.:format)                      devise_invitable/registrations#destroy
          static_pages_home GET    /static_pages/home(.:format)          static_pages#home
         dashboard_teachers GET    /teachers/dashboard(.:format)         teachers#dashboard
                       root GET    /                                     static_pages#home

маршруты.rb

Rails.application.routes.draw do

  devise_for :students, path_names: {sign_in: "login", sign_out: "logout"}
  devise_for :teachers, path_names: {sign_in: "login", sign_out: "logout"}
  devise_for :users, path_names: {sign_in: "login", sign_out: "logout"}
  get 'static_pages/home'

  resources :teachers, only: [] do 
  collection do
    get :dashboard
  end
  end  


   root 'static_pages#home'

end

Благодарим вас заранее.


person Ghulam Jilani    schedule 08.06.2016    source источник
comment
Разве вы не должны использовать пользователя в качестве модели, разделенной ролями Студент, Учителя?   -  person Ronak Jain    schedule 08.06.2016
comment
Учитель и ученик — это отдельные модели, а не роль Пользователя.   -  person Ghulam Jilani    schedule 08.06.2016
comment
Вы можете вставить вывод rake routes   -  person Ronak Jain    schedule 08.06.2016
comment
Маршруты @Ronak Jain добавлены в описание вопроса.   -  person Ghulam Jilani    schedule 09.06.2016


Ответы (2)


К сожалению, мне не хватает 7 очков репутации, чтобы оставить комментарий к вашему вопросу. Поэтому я делаю это так.

У вас есть два пользователя: 1) Студент 2) Учитель. Почему у вас есть 3 способа входа?

В любом случае, я думаю, вы хотите, чтобы только учитель мог отправлять приглашения ученикам. Как я вижу сейчас, вы сделали свои маршруты так, что только студенты могут отправлять приглашения студентам. Так почему бы не изменить ваши маршруты?

person Seifer    schedule 09.06.2016
comment
Почему вы потеряли баллы? Учитель может войти в систему, чтобы увидеть свои собственные данные, то же самое для ученика, поэтому мы делаем их вход в систему отдельно. Как я могу изменить свои маршруты? - person Ghulam Jilani; 09.06.2016
comment
Но у вас также есть логин пользователя. Что может сделать пользователь? Можете ли вы показать мне маршруты.rb - person Seifer; 09.06.2016
comment
У пользователя есть разные роли, такие как суперадминистратор, администратор и т. д. Маршруты добавляются в описании вопроса. - person Ghulam Jilani; 09.06.2016

Переопределите метод аутентификации_inviter gem в Application Controller:

class ApplicationController < ActionController::Base
protected
  def authenticate_inviter!
    authenticate_teacher!(:force => true)
  end
end

И включите модуль DeviseInvitable::Inviter в модель учителя:

class Teacher < ActiveRecord::Base
  devise :database_authenticatable, :validatable
  include DeviseInvitable::Inviter
end

Вы можете определить ассоциацию в модели, по которой вы хотите, чтобы все приглашения отправлялись следующим образом:

class Teacher < ActiveRecord::Base
    has_many :invitations, :class_name => self.to_s, :as => :invited_by
end
person Ghulam Jilani    schedule 10.06.2016