gpt4 book ai didi

ruby-on-rails - 将 Controller 和邮件程序使用的实用程序代码放在哪里?

转载 作者:行者123 更新时间:2023-12-04 04:59:33 25 4
gpt4 key购买 nike

我们的应用程序具有“通知”,您可以通过网站上的收件箱查看这些“通知”,并且还可以通过电子邮件向您介绍它们。当您收到通知时,它会包含一个用于回复相关消息的链接。这可能意味着将 PM 发送回原始消息的发件人,或者可能意味着对帖子发表评论。

这是确定要使用的回复链接的代码:

if @notification.post
# comment on the post in question
@reply_link = new_comment_path(:post_id => @notification.post.id)
else
# by default, reply link sends a PM in return
@reply_link = new_notification_path(
:recipient_id => @notification.sender.id,
:subject => @notification.subject =~ /^Re: / ?
@notification.subject :
"Re: " + @notification.subject
)
end

我是从我们的 Controller 代码中获取的,顺便说一句: app/controllers/notifications_controller.rb
现在我们想在我们的电子邮件通知中包含相同的回复链接,这意味着我们需要在 app/mailers/notifier.rb 中生成相同类型的回复链接。

我不想重复自己,所以我宁愿创建一个 reply_link方法并将其放在 Controller 和邮件程序都可以访问它的地方。

我的第一个想法是把它放在模型中,这样我们就可以有 Notification.reply_link .这很好,但它不起作用,因为我们需要 new_comment_pathnew_notification_path这些在模型中不可用。

我的第二个想法是使用助手,但是a)每个人似乎都认为助手很糟糕,b)我们无论如何都无法让它工作。

那么,我应该把这个方便的地方放在哪里 reply_link方法,以便 Controller 和邮件程序都可以访问它,并与良好的编码实践保持一致?

最佳答案

将其提取到一个模块并“混合”以在您需要的两个地方访问它。

您可以将模块放在您喜欢的任何位置:lib 文件夹在历史上一直很受欢迎,或者在您的应用程序目录中创建一个“模块”文件夹。

关于ruby-on-rails - 将 Controller 和邮件程序使用的实用程序代码放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16310948/

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