after_create来自模型的成就通知

时间:2012-07-01 19:11:30

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我正在建立一个成就系统,最后一部分正在通知用户。一旦在模型中创建了成就

class Achievement < ActiveRecord::Base

   def self.check_conditions_for(user)
     if user.month_views >= 30 and !user.views_awarded?(self)
      user.award(self)
     end
   end
end

我需要向用户发送自定义通知,然后他们可以关闭。从模型中启动此操作的最佳方法是什么?我知道我只能从控制器调用Flash消息,但在这个实例中我需要一个解决方法。它看起来与堆栈溢出显示其徽章的方式非常相似。

1 个答案:

答案 0 :(得分:2)

好的,如果用户观看视频 - 可能会点击某个网址,则应该在关联的操作中调用Achievement.check_conditions_for(user)Achievement.check_conditions_for(user)可以返回一些值 - 可能是通知消息 - 您可以将其作为普通的Flash消息发送。如果在调用某个操作时执行此操作,则无需在此处进行解决方法。

例如,如果您有一个控制器Videos并且您正在调用操作watch

def watch
  @video = Video.find(params[:id])
  @notice = Achievement.check_conditions_for(current_user)
  respond_to do |format|
    format.js
  end
end

在app / views / videos / watch.js.erb中:

alert("<%= @notice %>");
相关问题