LoginSignup
6
5

More than 5 years have passed since last update.

DeviseInvitableの使い方

Last updated at Posted at 2015-07-13

公式に書かれていることを、端折って日本語で書いただけです。

調べたことの備忘録なので、不定期で更新される可能性があります。
間違っている点や、怪しい日本語訳があると思いますorz

環境

Ruby: 2.2.1
Rails: 4.2.3
devise: 3.5.1
devise_invitable: 1.5.1

Devise

deviseのインストールは、こちらの手順で終わっているものとします。

DeviseInvitable

インストール

$ bundle exec rails g devise_invitable:install
      insert  config/initializers/devise.rb
      create  config/locales/devise_invitable.en.yml

初期設定

モデルの設定

# deviseで作ったモデルを指定します(ここでは「User」)。
$ bundle exec rails g devise_invitable User
      insert  app/models/user.rb
      invoke  active_record
      create    db/migrate/20150713020302_devise_invitable_add_to_users.rb

使い方

Userモデルを前提で記述します。

devise_invitableのオプションを、モデルに設定します。

class User < ActiveRecord::Base
  # deviseのオプションはあえて消しました。
  devise :invitable
end
# 該当カラム
t.string     :invitation_token
t.datetime   :invitation_created_at
t.datetime   :invitation_sent_at
t.datetime   :invitation_accepted_at
t.integer    :invitation_limit
t.references :invited_by, polymorphic: true
t.integer    :invitations_count, default: 0
t.index      :invitations_count
t.index      :invitation_token, unique: true # for invitable
t.index      :invited_by_id

任意の設定

ビュー

カラムを追加したり、デザインを変えたりする場合は、テンプレートのビューをapp/views/devise配下に作成。

$ bundle exec rails g devise_invitable:views
      invoke  DeviseInvitable::Generators::MailerViewsGenerator
       exist    app/views/devise/mailer
      create    app/views/devise/mailer/invitation_instructions.html.erb
      invoke  form_for
      create    app/views/devise/invitations
      create    app/views/devise/invitations/edit.html.erb
      create    app/views/devise/invitations/new.html.erb

コントローラ

デフォルトの処理から変更したい場合は、devise_invitableのコントローラをoverrideする。
※deviseと違い、ジェネレータは用意されていません。

class Users::InvitationsController < Devise::InvitationsController
  def new
    super
  end

  def create
    super
  end

  def edit
    super
  end

  def update
    super
  end

  def destroy
    super
  end
end

続いて、ルーティング設定を行います。

# routes.rb
# overrideするコントローラを指定
devise_for :users, controllers: {
  invitations: 'users/invitations'
}

追加カラム

Strong Parameterを有効にしていて追加カラムがある場合は、permitの設定をする必要があります。
※deviseと共通です。

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    # アカウント登録時に「username」を追加した場合
    devise_parameter_sanitizer.for(:invite) << :username
  end
end

for()で指定できるシンボルは、以下の3点です。

  • :invite: 招待メールを送る時
  • :accept_invitation: 招待メールからアカウント情報を登録する時
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5