2010-01-04 59 views
3

我试图发送Flash消息并欢迎用户注意,如果这是他们的第一次评论;基本上是这样的:Ruby on Rails:观察者和flash [:notice]消息?

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 

我不知道我应该如何对用户显示的那一刹那消息他们创造他们的第一个评论之后。我是否应该在控制器中添加该闪光消息(附加“if comment.user.new?”)还是有更高效地显示闪光消息的方法?

回答

5

将闪光消息放在方法中对我来说似乎很好。

我通常在我的application_helper文件中有一个辅助方法来检查flash和diplays。

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

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

要回答你的问题,我肯定会把你的控制器中的闪存分配,原因是闪存是一个视图级别的问题。

我曾经使用观察员发送邮件,但最近刚刚发送他们在控制器。在这种情况下,这样做会让你的生活变得更简单。