2012-03-23 77 views
4

我想添加一個可選的text_field以將可選消息添加到邀請電子郵件。因此,如果沒有任何東西放入消息,則來自invitation_instructions.html.erb的標準消息應該發送,否則應該發送text_field的消息。設計可選的自定義消息

如何在設計中做到這一點?

回答

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.1版本完全沒有問題。但據我所知,我現在必須爲提醒生成一個新的令牌和一個新的鏈接(我不想),或者將raw_invitation_token存儲起來供以後使用(這違背了新的令牌系統的整個概念)。任何想法如何解決這個困境? – wdspkr 2013-10-10 14:33:57