ruby - 如何在 Rails 5 中使用来自设计邮件程序的辅助方法?

标签 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 运行时,它正在加载正确的模块并显然将其正确添加到 helpers * 执行模板时,UsersHelper 中的方法没有存在。

肯定有什么地方明显不对,但我自己怎么看都看不出来。

最佳答案

更改为:

class UserMailer < Devise::Mailer
  helper UsersHelper
end

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

关于ruby - 如何在 Rails 5 中使用来自设计邮件程序的辅助方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42014802/

相关文章:

ruby-on-rails - 使用 Devise 和 Paypal 进行用户注册

ruby-on-rails - Rails 5 - 如何对 has_many 关联列表进行排序?

ios - 为什么安装XCode后RVM找不到编译器和 'make'工具?

ruby-on-rails - Rails 控制台 : Run a Ruby file several times

ruby-on-rails - 如何将蜜 jar 字段添加到我的表单中?

ruby-on-rails - 无法覆盖设计密码 Controller

ruby - Rails -- "remember me"能力

ruby - RegExp#match 只返回一个匹配项

ruby-on-rails - 如何在 Rails 5 中创建用于显示操作的自定义路线?

ruby-on-rails - Rails 中 RESTful 路由的更新操作(PATCH 或 PUT)