我正在建立一个成就系统,最后一部分正在通知用户。一旦在模型中创建了成就
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消息,但在这个实例中我需要一个解决方法。它看起来与堆栈溢出显示其徽章的方式非常相似。
答案 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 %>");