设计可邀的可选自定义消息

时间:2012-03-23 15:14:00

标签: devise

我想添加一个可选的text_field来向邀请电子邮件添加可选消息。因此,如果没有任何内容放入消息,那么来自invitation_instructions.html.erb的标准消息应该另外发送text_field的消息。

如何在设计中做到这一点?

1 个答案:

答案 0 :(得分: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中(与devise&gt; = 3.1兼容)。

我们基本上是一起跳过设计邀请流程并使用我们自己的邮件程序。我们将内容作为参数并将其作为电子邮件的正文发送。我们甚至用实际值代替占位符。

此解决方案将为您提供电子邮件所需的灵活性。如果您愿意,甚至可以为其添加跟踪像素。