gpt4 book ai didi

ruby-on-rails - 在 Rails 中使用观察者模式时传递实例变量

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:05 26 4
gpt4 key购买 nike

我在 Rails 中使用观察者模式。 TestObserver 中的“delivered_email”方法将在通知邮件发出后被调用。如何将“通知”中的实例变量传递给“delivered_email”?我可以将它添加到标题或主题中。但这可能会带来安全问题,因为收到电子邮件的用户也可以看到该变量。有没有更好的办法解决?

class GeneralMailer < ActionMailer::Base
def notification(data)
@emails = data[:emails]
subject = "#{@sender.to_s}"
mail(:to => @emails, :subject => subject)
end
end

class TestObserver
def self.delivered_email(message)
begin
# do something here
puts @emails
rescue => ex
# do something here
end
end

ActionMailer::Base.register_observer(TestObserver)

最佳答案

如果你确实想向邮件观察者发送扩展信息——就像我自己所做的——可以通过对你的邮件程序进行一些猴子修补来使用从 Mail::Message 扩展的自定义类来完成>.

请注意,这需要设置一个内部的、未记录的属性。在未来的 Rails 版本中,它可能无法继续工作。

class ExtendedMessage < Mail::Message
attr_accessor :extra_args
end

class ApplicationMailer
before_action :patch_message

def patch_message
# Patch the internal attribute @_message to use our overridden class
# that you can store extra attributes inside.
# NOTE: If a future Rails version decides to change the internals, this could break.
@_message = ExtendedMessage.new
end
end

class MailObserver
def self.delivered_email(mail)
do_something_with mail.extra_args
end
end

关于ruby-on-rails - 在 Rails 中使用观察者模式时传递实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519918/

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