gpt4 book ai didi

ruby-on-rails - 根据条件交付方式? rails

转载 作者:行者123 更新时间:2023-12-03 01:21:24 24 4
gpt4 key购买 nike

Rails 4.1.4,我有很多类 Mailers,它们都有不同的传递方法。现在这给我带来了一个问题。

在开发和测试环境中,当我将delivery_method设置为:test时,如果我使用下面的类执行和交付,那么交付方法将变为:custom_method,即使我在rails环境文件中提到了config.delivery_method = :test

class CustomMailer < ActionMailer::Base

default :delivery_method => :custom_method,
from: "...",
reply_to: '...'

def emailer(emails)
mail(to: emails, subject: 'test')
end

end

在开发和测试环境中将 :custom_method 更改为 :test 的正确方法是什么?

我已经实现的一个可能有效的解决方案是:

class CustomMailer < ActionMailer::Base

DELIVERY_METHOD = Rails.env == 'production' ? :custom_method : :test

default :delivery_method => DELIVERY_METHOD,
from: "...",
reply_to: '...'

def emailer(emails)
mail(to: emails, subject: 'test')
end

end

这对我有用,但我觉得这不是一个好方法,因为我必须写这一行:

DELIVERY_METHOD = Rails.env == 'production' ? :custom_method : :test

在每个 Mailer 类中,这可能会导致冗余。如果能以某种常见的方式处理那就太好了。

请注意,每个 Mailer 类都有不同的传递方法。

最佳答案

您采用的方法当然有效,但我相信在代码中查询 Rails.env 是一种反模式。

您可以通过设置 custom config attribute 来使用应用程序配置。这是一个例子:

# config/production.rb
Rails.application.configure do
# by having this configured by an environment variable
# you can have different values in staging,
# develop, demo, etc.. They all use "production" env.
config.x.mailer_livemode = ENV['MAILER_LIVEMODE']
end

# config/development.rb
Rails.application.configure do
config.x.mailer_livemode = false
end

# config/test.rb
Rails.application.configure do
config.x.mailer_livemode = false
end

# app/mailers/custom_mailer.rb
default delivery_method: Rails.application.config.x.mailer_livemode ? :custom_method : :test

灵 active 优越。您可以让多个配置变量一起工作,直接在配置中设置 delivery_method 等。

最重要的是,您不会依赖与电子邮件发送方式无关的东西(Rails.env)。

关于ruby-on-rails - 根据条件交付方式? rails ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46617381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com