0

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

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 消息,但在这种情况下我需要一种解决方法。它看起来与堆栈溢出显示其徽章的方式非常相似。

4

1 回答 1

2

好的,所以如果用户观看视频——大概是点击某个 url,你应该调用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 %>");
于 2012-07-01T20:08:55.787 回答