公式に書かれていることを、端折って日本語で書いただけです。
調べたことの備忘録なので、不定期で更新される可能性があります。
間違っている点や、怪しい日本語訳があると思います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
: 招待メールからアカウント情報を登録する時