【问题标题】:How do I use helper methods from a devise mailer in Rails 5?如何在 Rails 5 中使用设计邮件程序中的辅助方法?
【发布时间】:2023-04-05 18:05:01
【问题描述】:

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

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 中的方法存在。

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

【问题讨论】:

  • 你试过包含UsersHelper
  • 这就是helper :users 应该实现的目标。不过这是很久以前的事了,我什至不记得这个问题是如何避免的。

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


【解决方案1】:

改为:

class UserMailer < Devise::Mailer
  helper UsersHelper
end

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

【讨论】:

  • 在 2018 年我曾说过问题是很久以前的问题,我不记得我们是如何解决的,现在是 2019 年,但我的印象是,如果我们命名这样的方法,它可能是故意命名的,以匹配 Rails 辅助方法,甚至可能作为那些因其他原因不工作的人的解决方法......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
相关资源
最近更新 更多