好吧,我实际上是使用letter_opener_web来预览我即将发送的电子邮件。明白,我不是在开发人员方面(letter_opener最初是为了开发环境),而是在我网站的用户一边。我使用letter_opener作为生产组件。
我需要访问letter_opener视图,但是letter_opener的默认实现是在routes.rb中完成的
mount LetterOpenerWeb::Engine, at: "/letter_opener"
我现在使用了一种生成随机路径的技巧,只在我渲染的Web视图中传递URL,但是,这很糟糕:D
if Rails.env.development?
mount LetterOpenerWeb::Engine, at: "/letter_opener"
else
mount LetterOpenerWeb::Engine, at: "/#{SecureRandom.hex(12)}"
end
有没有办法可以覆盖某些控制器来添加我自己的访问控制实现?我当前的访问控制(我不会改变)是这样完成的
class ApplicationController
before_action :access_denied
end
class SomeController < ApplicationController
prepend_before_action :allow_access_to_xxxx
end
这就是为什么我需要一些方法来覆盖letter_opener的控制器,同时仍然使其视图可用(如果可能的话,通过保持简单的语法添加到路由中!)
编辑:我的用户案例。只需要几行代码即可预览而不是发送电子邮件
...
mail(
to: dst,
from: message[:from],
subject: @subject_full,
delivery_method: real_or_preview(message))
...
# Switch delivery method to letter_opener if preview
def real_or_preview(message)
if message[:preview]
:letter_opener
else
ActionMailer::Base.delivery_method
end
end