我们的应用有“通知”,您可以通过网站上的收件箱查看,也可以通过电子邮件告诉您相关信息。当您收到通知时,它会包含一个回复相关邮件的链接。这可能意味着将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
我从控制器代码中获取了它,顺便说一下:app/controllers/notifications_controller.rb
现在我们要在电子邮件通知中包含相同的回复链接,这意味着我们需要在app/mailers/notifier.rb
我不想重复自己,所以我宁愿创建一个reply_link
方法,并把它放在控制器和邮件程序都可以访问它的地方。
我的第一个想法是把它放在模型中,这样我们就可以Notification.reply_link
。这很好,但它不起作用,因为我们需要模型中没有的new_comment_path
和new_notification_path
。
我的第二个想法是使用帮手,但是a)每个人似乎都认为帮助者很糟糕,而b)我们无论如何也无法让它工作。
那么,我应该在哪里放置这个方便的reply_link
方法,以便控制器和邮件程序都可以访问它,并且与良好的编码实践保持一致?
答案 0 :(得分:2)
将其解压缩到模块并“混入”以在您需要的两个位置访问它。
您可以将模块放在任何您喜欢的地方:lib文件夹一直是历史上最受欢迎的地方,或者在您的app目录中创建“modules”文件夹。
答案 1 :(得分:1)
将其放入/app/helpers
或/lib
我通常倾向于将控制器访问的方法放在助手
中