如何在Rails 5中使用设计邮件程序中的帮助方法?

时间:2017-02-03 00:27:25

标签: ruby devise ruby-on-rails-5

在某些时候,我发现自己想要在帮助器中添加一些逻辑来从我的邮件模板中调用,但出于某种原因,我似乎无法让它工作。

config/initializers/devise.rb

Devise.setup do |config|
  # ...
  config.mailer = 'UserMailer'
  # ...
end

app/mailers/user_mailer.rb

class UserMailer < Devise::Mailer
  helper :users
  # Also tried:
  # helper UsersHelper
  # add_template_helper UsersHelper
  # helper :application
end

app/helpers/users_helper.rb

module UsersHelper
  def drupal_password_reset_path(user)
    # ...
  end
end

app/views/users/mailer/reset_password_instructions.html.erb

<!-- ... -->
  <p><%= link_to 'Change my password', drupal_password_reset_path(@resource) %></p>
<!-- ... -->

当它执行模板时,它无法找到drupal_password_reset_path方法。

通过插入一些断点并稍微踩一下我知道的事情: *运行helper :users时,它正在加载正确的模块并显然正确地将其添加到帮助程序 *执行模板时,UsersHelper中的方法的 none 存在。

肯定有一些明显错误的事情,但无论我多么努力,我都无法自己看到它。

1 个答案:

答案 0 :(得分:0)

更改为:

class UserMailer < Devise::Mailer
  helper UsersHelper
end

此外,我不会在名称中使用带有_path的任何帮助器方法,因为它可能与Rails URL帮助器冲突。尝试更改您的助手方法名称。