Ruby on Rails:观察者和flash[:notice]消息?

3

我正在尝试向用户发送闪存消息和欢迎通知,如果这是他们第一次评论的话; 基本上,像这样:

  class CommentObserver < ActiveRecord::Observer
    def after_save(comment)
      if comment.user.new?
        Mailer.deliver_welcome_package(comment)
        flash[:notice] = "Welcome! We just delivered a welcome package to your email"
      end
    end
  end

我不确定在用户创建第一个评论后应该如何显示flash消息。我应该将该flash消息放在控制器中(使用额外的“if comment.user.new?”),还是有更有效的方法来显示flash消息?

2个回答

5

我认为将闪现消息放在方法中是可以的。

通常我在我的 application_helper 文件中有一个辅助方法来检查闪现消息并进行显示。

def show_flash
    [:notice, :error, :warning].collect do |key|
      content_tag(:div, flash[key], :id => key, :class => "flash flash_#{key}") unless flash[key].blank?
    end.join
  end

我有三种类型的消息,通知、警告和错误。这个程序检查它们是否被设置,如果是,则打印出来;如果没有设置,则不打印任何内容。
在我的布局中,我有...
<% show_flash %>

2

首先,为什么要观察评论?如果你想对新用户做出反应,为什么不观察用户呢?

回答你的问题,我肯定会把flash分配到你的控制器中,原因是flash是视图级别的关注点。

我曾经使用观察者来发送邮件,但最近更多地在控制器中发送它们。在这种情况下,这样做会让你的生活变得更简单一些。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接