ruby-on-rails - Rails 4.1 Mailer 预览和设计自定义电子邮件

标签 ruby-on-rails ruby ruby-on-rails-4 devise

我有一个全新的 Rails 4.1.1 应用程序,我正在其中自定义 Devise 电子邮件。我想让它们显示在新的 Rails 电子邮件预览功能中,所以我执行了以下操作:

1) 将以下片段添加到我的 config/development.rb 文件中:

config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"

2) 在 app/mailers/user_mailer.rb 中创建我的自定义 Devise 电子邮件 UserMailer:

class UserMailer < Devise::Mailer   
  helper :application # gives access to all helpers defined within `application_helper`.
  include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url`

  layout "notifications_mailer"
end

3) 更改了 config/initializers/devise.rb 以包含以下片段:

config.mailer = 'UserMailer'

4) 将类 UserMailerPreview 添加到 lib/mailer_previews 中,内容如下:

class UserMailerPreview < ActionMailer::Preview
  def confirmation_instructions
    UserMailer.confirmation_instructions(User.first, {})
  end

  def reset_password_instructions
    UserMailer.reset_password_instructions(User.first, {})
  end

  def unlock_instructions
    UserMailer.unlock_instructions(User.first, {})
  end
end

到目前为止,还不错。看起来我做对了一切。但是后来我尝试在/rails/mailers/user_mailer/confirmation_instructions 路由中查看 confirmation_instructions 电子邮件的预览,但我收到以下错误:

undefined method `confirmation_url' for #<#<Class:0x007fa02ab808e0>:0x007fa030fb7e80>

我的 confirmation_url.html.erb 模板的代码如下所示:

<%= t("notifications.texts.greeting") + @user.display_name %>,

<p>You can confirm your account email through the link below:</p>

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token =>  @token) %></p>

我做错了什么?我猜我调用 confirmation_url 方法的方式有问题。任何人都可以在这里帮助我吗?

最佳答案

对于那些希望在不使用自定义邮件程序的情况下预览 Devise 电子邮件(但仍然是自定义电子邮件)的人,这就是我所做的:

  1. 配置您的应用以进行电子邮件预览。

  2. 设置 Devise Mailer 预览类

    一个。 rails ~> 4.1

    # mailer/previews/devise_mailer_preview.rb
    class Devise::MailerPreview < ActionMailer::Preview
    
      def confirmation_instructions
        Devise::Mailer.confirmation_instructions(User.first, "faketoken")
      end
    
      def reset_password_instructions
        Devise::Mailer.reset_password_instructions(User.first, "faketoken")
      end
    
      ...
    
    end
    

    rails ~> 5.0

    class DeviseMailerPreview < ActionMailer::Preview
    
      ... # same setup as Rails 4 above
    
  3. 重启服务器

关于ruby-on-rails - Rails 4.1 Mailer 预览和设计自定义电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23716397/

相关文章:

ruby - 我可以从范围访问一个参数吗?

ruby-on-rails - 在 Ruby on Rails 中访问自定义 header 变量

ruby-on-rails - 如何将模型字段作为字符串输入(未定义方法 `b' 为 :title:Symbol)

ruby-on-rails - 是否有一个 Sublime Text 2 包可以找到对 Rails View 局部渲染的调用?

ruby - 使用 Ruby 自动化脚本打开 Firefox 浏览器

javascript - Rails 4/ajax - NoMethodError - 未定义方法 `id' for nil :NilClass - Passing variable to js modal

ruby - ActiveJob::SerializationError - 不支持的参数类型:Time/DateTime

ruby-on-rails - 如何使用 Sendgrid API 发送电子邮件以使用 rails 4 发送电子邮件?我似乎无法把所有的部分放在一起

ruby-on-rails - 下划线在 Rails 标题中转换为连字符?

ruby-on-rails - 如何在 Rails Engine 4.1.5 中安装 Foundation