Rails before_action for ActionMailer 将使用邮件程序参数

2024-06-10

假设我有一个发送不同电子邮件的邮件程序,但预计会使用相同的参数进行调用。我想为所有邮件程序操作处理这些参数。所以,调用一个before_action这将读取发送到邮件程序方法的参数

/mailers/my_mailer.rb
class MyMailer < ApplicationMailer
    before_filter do |c|
      # c.prepare_mail # Will fail, because I need to pass `same_param` arguments
      # # I want to send the original arguments
      # c.prepare_mail(same_param) # How do I get `same_param` here ?
    end

    def action1(same_param)
      # email view is going to use @to, @from, @context    
      method_only_specific_to_action1
    end

    def action2(same_param)
      # email view is going to use @to, @from, @context
      method_only_specific_to_action2
    end

    private
      def prepare_mail(same_params)
        @to = same_params.recipient
        @from = same_params.initiator
        @context = same_params.context
      end
    end

然后在我的控制器/服务中我在某个地方做

MyMailer.actionx(*mailer_params).deliver_now

我怎样才能访问same_param里面的参数列表before_action block ?

EDIT :

我想重构

/mailers/my_mailer.rb
class MyMailer < ApplicationMailer

    def action1(same_param)
      @to = same_params.recipient
      @from = same_params.initiator
      @context = same_params.context   
      method_only_specific_to_action1
    end

    def action2(same_param)
      @to = same_params.recipient
      @from = same_params.initiator
      @context = same_params.context   
      method_only_specific_to_action2
    end

    def actionx
      ... 
    end
  end

而这次重构

/mailers/my_mailer.rb
class MyMailer < ApplicationMailer

    def action1(same_param)
      prepare_mail(same_params)   
      method_only_specific_to_action1
    end

    def action2(same_param)
      prepare_mail(same_params)   
      method_only_specific_to_action2
    end

    def actionx
      ... 
    end

    private
      def prepare_mail(same_params)
        @to = same_params.recipient
        @from = same_params.initiator
        @context = same_params.context
      end
    end

感觉不是最佳的(prepare_mail(same_params)每个动作都重复)

因此上面建议的


ActionMailer 使用AbstractController::Callbacks模块。我尝试过,它似乎对我有用。

The code

class MyMailer < ApplicationMailer
  def process_action(*args)
    # process the args here
    puts args
    super
  end

  def some_mail(*args)
  end
end

MyMailer.some_mail(1, 2) #=> prints ['some_mail', 1, 2]

文档 http://api.rubyonrails.org/classes/AbstractController/Callbacks.html#method-i-process_action


UPDATE

如果你使用的是Rails 5.1,你可以看看ActionMailer::参数化 http://api.rubyonrails.org/v5.1/classes/ActionMailer/Parameterized.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails before_action for ActionMailer 将使用邮件程序参数 的相关文章

  • 如何在 Ruby 中处理大文件?

    我对编程还很陌生 所以要温柔 我正在尝试从图书馆数据库 dat 文件中提取 IBSN 编号 我已经编写了有效的代码 但它只搜索了 180MB 文件的大约一半 如何调整它以搜索整个文件 或者我如何编写一个程序将 dat 文件分割成可管理的块
  • 退出无法在 Heroku 上工作 - 使用 Devise gem 和 Rails 4

    我刚刚对使用 Devise 进行身份验证的 Rails 4 应用程序进行了初始部署到 Heroku 注销可以在本地进行 但 Heroku 返回错误 您正在查找的页面不存在 并且不会注销用户 根据 Heroku 日志和 Google SO 搜
  • before_filter set_locale 除了控制器

    My routes rb MyApp Application routes draw do scope locale do all resources here end namespace blog do resources posts o
  • 如何在 ruby​​ on Rails 中的 haml 内的 js 设置会话变量?

    我通过 js 有表行着色 针对行组 我想让它通过会话变量记住阴影 我正在使用的 haml 部分有 Group Shading a href gt id gt row colors on On a href gt id gt row colo
  • 两列 Jekyll 布局,用标签分隔?

    我目前正在 Jekyll 博客上工作 我想将我的 Markdown 文件采用以下格式 div class row div class col md 6 div div class col md 6 div div 我希望我的代码块在一列中
  • Ruby:如何将多个方法调用与“发送”链接在一起

    必须有一种内置的方法来做到这一点 对吧 class Object def send chain arr o self arr each a o o send a return o end end 我刚刚遇到了这个 它确实需要注入 def s
  • ruby require 问题(与 $LOAD_PATH 有关)

    我正在尝试使用我刚刚安装的 gem 通过sudo gem install excelsior 像这样 需要 红宝石 要求 精益求精 这在 irb 中工作得很好 但是当我将完全相同的代码粘贴到 rb 文件中并尝试使用 ruby 运行它时 我得
  • 登录西纳特拉?

    我无法弄清楚如何使用 Sinatra 记录消息 我不想记录请求 而是在我的应用程序中的某些点记录自定义消息 例如 当获取 URL 时 我想记录 Fetching url 这就是我想要的 指定日志级别的能力 例如 logger info Fe
  • 在 Ruby 中获取用户主目录的跨平台方法?

    Java有方便的System getProperty user home 以与平台无关的方式获取用户的 主 目录 Ruby 中的等价物是什么 我没有 Windows 盒子可供使用 而且我觉得依赖文件名中的波浪号并不是最干净的方法 还有其他选
  • 如何从 Sinatra 中删除路线?

    我有一些动态加载的插件 它们在启动时注册它们的路由 但是我还需要能够在禁用它们时删除它们的路由 有没有办法删除现有的路线 API 没有任何我能找到的方法来删除它们 我能想到的唯一其他方法就是直接访问 Sinatra Base 中的 rout
  • 为什么 ruby​​ 与字符串数组并行赋值返回字符串

    我不确定下面的代码片段到底发生了什么 gt gt a b ho hey gt ho hey gt gt a gt ho gt gt b gt hey gt gt c d foo bar gt foo bar gt gt c gt foo g
  • 如何在 js.erb 中使用 Ruby 代码?

    我可以使用以下方式在模态中渲染部分内容escape javascript在js erb文件代码中 body append my modal modal show 但是 我似乎无法获得以下结果 console log ERB 将输出一个纯字符
  • Rails:构建涉及多态关联和 STI 的查询

    我正在尝试查找有关照片的 10 条最新评论 以便将它们集成到我的 Rails 3 0 3 应用程序上的活动提要中 我有一个Photo模型 它继承自Upload使用单表继承的模型 class Upload lt ActiveRecord Ba
  • Ruby on Rails Active Record RANDOM() 在循环内始终相同

    当每次循环迭代应该抓取随机记录时 为什么会重复输出相同的记录 ID count 0 while count lt 20 puts ID SomeModel where assoc id 10 order RANDOM limit 1 fir
  • Amazon SQS 优先级队列

    是否可以使用 Amazon 简单队列服务创建优先级队列 最初我找不到有关该主题的任何内容 这就是我创建两个队列的原因 一个普通队列和一个优先队列 我根据我定义的规则将消息排队到该队列 但在使消息出队时会出现混乱 如何对队列进行长轮询 以便我
  • Ruby 中有内置的惰性哈希吗?

    我需要用各种值填充哈希 有些值被经常访问 而另一些值则很少被访问 问题是 我使用一些计算来获取值 并且使用多个键填充哈希变得非常慢 在我的情况下 使用某种缓存不是一个选择 我想知道如何使哈希仅在第一次访问密钥时计算值 而不是在添加密钥时计算
  • 摆脱弃用警告:env 已弃用,将从 Rails 5.0 中删除。

    在迁移到 Rails 5 0 0 beta1 时 我发现了很多弃用警告 DEPRECATION WARNING env is deprecated and will be removed from Rails 5 0 called from
  • 如何创建用于 Apple Music 的 JWT

    我正在尝试创建一个开发者令牌 即 ES256 JWT 用于 Apple Music 身份验证 Here https developer apple com library content documentation NetworkingIn
  • 独立的 ruby​​——如何从database.yml加载不同的环境

    我有一个修改数据库中记录的后台进程 模型使用如下方式连接到数据库 dbconfig YAML load File open database yml ActiveRecord Base establish connection dbconf
  • 所有页面的背景图片均使用虾

    我在视图中有这段代码 prawn document page size gt A4 top margin gt 80 bottom margin gt 40 background gt public uploads 1 png do pdf

随机推荐

  • redis能完全取代mysql吗?

    简单的问题 我是否可以使用 redis 而不是 mysql 来处理各种 Web 应用程序 社交网络 地理位置服务等 IT 领域没有什么是不可能的 但有些事情可能会变得极其复杂 将键值存储用于全文搜索之类的事情可能会非常痛苦 另外 据我所知
  • 在 ES6 中使用 import 和 require 的正确方法是什么?

    关于 import 和 require 及其差异有多个问题 像这些 JavaScript 中的 import 和 require 有什么区别 https stackoverflow com questions 51373933 what i
  • 获取正确的 JSON 格式

    所以我试图创建一个 JSON 对象 它应该为我保存一些有关某些问题的信息 这是我希望如何呈现它的伪代码 page 1 info id 1 type 3 description How to do JSON alternatives id 1
  • Keycloak 使用不同的客户端重新验证经过身份验证的用户

    如果我有一个用户已通过 keycloak 与领域 R 下的公共客户端 C1 进行身份验证 那么我可以在 keycloak 中点击一个端点 该端点将为同一领域 R 下的不同公共客户端 C2 生成新的访问令牌吗 更新 1 我尝试使用刷新令牌为
  • 为什么我们不能在当前队列上使用dispatch_sync?

    我遇到了一个场景 我有一个委托回调 它可能发生在主线程或另一个线程上 并且直到运行时我才知道是哪个 使用StoreKit framework 我还需要在该回调中更新 UI 代码 该回调需要在函数执行之前发生 所以我最初的想法是拥有一个如下所
  • Python-将月份名称转换为整数

    如何使用日期时间将 Jan 转换为整数 当我尝试 strptime 时 出现错误time data Jan does not match format m 您有一个缩写的月份名称 因此请使用 b gt gt gt from datetime
  • RxJava2 .subscribeOn .observeOn 混淆。在主线程上运行

    我有一个调用 Web 服务的方法 我认为该方法在 IO 线程上运行 直到服务停止且 UI 冻结 所以我开始了一些简单的测试来检查线程 implementation io reactivex rxjava2 rxandroid 2 0 1 i
  • 如何在 Java 中测试 JSON Collection 对象是否为空

    我收到的 JSON Collection 对象如下所示 foo1 bar1 foo2 bar2 problemkey problemvalue 我想要测试的是是否存在problemvalue If problemvalue返回一个 JSON
  • 使用 R 时 Bash 中的颜色语法突出显示

    我在 Ubuntu 下的 Bash 中运行 R 有没有办法在运行 R 时在 Bash 中使用颜色语法突出显示 我非常感谢有关该主题的任何信息 并希望这个问题不会令人烦恼地无知 您可以尝试colorout包裹
  • 使用用户身份验证的 SQL 数据库与 Active Directory 的连接字符串

    我正在连接到 Azure 服务器上的数据库 其中数据库位于不同的服务器上 并且通过选择选项 Active Directory 和用户凭据选项建立连接 它在 SQL Server 中工作 但我需要一个连接字符串来连接数据库 有什么建议如何去做
  • 如何控制 Orchard 中菜单的呈现

    我有以下问题 我正在果园制作一个网站 并且必须应用一些设计公司制作的设计 他们提供了 html 和 CSS LESS 我必须把它变成一个主题 除了菜单之外 大部分内容我都完成了 我想申请一个课程nav标签在下面的代码中 但我无法为最终渲染它
  • C语言中如何连接字符串? [复制]

    这个问题在这里已经有答案了 可能的重复 C语言中如何连接2个字符串 https stackoverflow com questions 8465006 how to concatenate 2 strings in c include
  • Java Toolkit 获取第二个屏幕尺寸

    我的计算机上插入了两个屏幕 想知道 JFrame 或 Toolkit 中是否有方法可以检测窗口位于哪个屏幕上 我有这个代码 java awt Toolkit getDefaultToolkit getScreenSize 它获取主屏幕的屏幕
  • Ember-数据引导模型对象

    当使用非远程 AJAX 调用的现有 JSON 引导 Ember 数据模型对象时 我是否必须进行以下 2 个调用 App store load App Account data var account App store find App A
  • 带有流星的网站图标?

    我正在尝试将网站图标加载到我的 Meteor 项目中 但无法让它工作 我尝试使用this https stackoverflow com questions 20054788 how to load a favicon with meteo
  • Android 在 Sqlite 中按 Id 选择行?

    我想在android sqlite中按id获取特定行并编写了以下代码 但它不返回任何记录 我写了一个getAllRecords 方法返回数据库中的所有记录 谁能解释我犯的错误 public Bank getBankById int bank
  • 计算 Adamic-Adar 的快速算法

    我正在研究图形分析 我想计算一个 N N 相似度矩阵 其中包含每两个顶点之间的 Adamic Adar 相似度 为了概述 Adamic Adar 让我从以下介绍开始 给定邻接矩阵A无向图的G CN是两个顶点的所有公共邻居的集合x y 两个顶
  • 从 jar 中为实体创建 (querydsl) 元模型

    我在为来自项目依赖项中包含的 jar 的实体生成 querydsl 元模型 即 Q 类 时遇到问题 该类 BaseEntity 是我的大多数实体 用 MappedSuperclass 注释 的抽象基类 并且由于项目原因以及对其他项目的依赖关
  • 更新清单 XML 后强制 Excel 刷新命令功能区(对于 Office 加载项)

    我正在使用 office js 和位于共享驱动器上的 XML 清单来侧载 Office 加载项 加载加载项后 这会添加一个新的功能区 其中包含一些自定义命令图标 然而 编辑manifest XML文件后 假设我从功能区注释掉命令图标 我还没
  • Rails before_action for ActionMailer 将使用邮件程序参数

    假设我有一个发送不同电子邮件的邮件程序 但预计会使用相同的参数进行调用 我想为所有邮件程序操作处理这些参数 所以 调用一个before action这将读取发送到邮件程序方法的参数 mailers my mailer rb class My