2012-03-23 16 views
4

任意のtext_fieldを追加して、招待メールにオプションのメッセージを追加したいと思います。したがって、何もメッセージに入れない場合、invitation_instructions.html.erbからの標準メッセージは、それ以外の場合はtext_fieldのメッセージを送信する必要があります。Invitableオプションのカスタムメッセージ

これを行う方法は?

答えて

5

これを達成するには、電子メールを作成するのではなく、独自のメーラーを使用することができます。ここ

はそれを行う方法である:

class User < ActiveRecord::Base 
    attr_reader :raw_invitation_token 
end 

class InvitationsController < Devise::InvitationsController 
    def create 
    @from = params[:from] 
    @subject = params[:invite_subject] 
    @content = params[:invite_content] 

    @user = User.invite!(params[:user], current_user) do |u| 
     u.skip_invitation = true 
    end 

    @user.deliver_invitation 
    email = NotificationMailer.invite_message(@user, @from, @subject, @content) 
    end 
end 

class NotificationMailer < ActionMailer::Base 
    def invite_message(user, venue, from, subject, content) 
    @user = user 
    @token = user.raw_invitation_token 
    invitation_link = accept_user_invitation_url(:invitation_token => @token) 

    mail(:from => from, :bcc => from, :to => @user.email, :subject => subject) do |format| 
     content = content.gsub '{{first_name}}', user.first_name 
     content = content.gsub '{{last_name}}', user.first_name 
     content = content.gsub '{{full_name}}', user.full_name 
     content = content.gsub('{{invitation_link}}', invitation_link) 
     format.text do 
     render :text => content 
     end 
    end 
    end 
end 

raw_invitation_tokenのみdevise_invitableの新しいバージョン(工夫> = 3.1と互換性のある)に存在します。

私たちは本質的に、私たち独自のメーラーを使用して、すべての団体招待プロセスをスキップしています。私たちはその内容をパラメータとして電子メールの本文として送信します。プレースホルダを実際の値に置き換えることさえあります。

このソリューションを使用すると、電子メールで何でも自由に柔軟に対応できます。必要に応じてトラッキングピクセルを追加することもできます。

+0

3日後に同じリンクのカスタム招待通知を送信したいと思います。以前のdevise 3.1バージョンではまったく問題ありませんでした。しかし、私が見ている限り、私は今、新しいトークンとそのリマインダーのための新しいリンク(私がしたくない)を生成するか、raw_invitation_tokenを後で使用するために保存しなければなりません(新しいトークンシステム)。どのようにこのジレンマを解決するための任意のアイデア? – wdspkr

関連する問題