2012-03-23 49 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