我正在使用beanstalkd plus backburner来运行异步作业,我希望在每个作业完成执行后自动更新flash消息和一些信息。
作业完成后,我可以在控制器上获取flash消息。页面刷新后,将显示Flash消息。但我想要的是消息本身出现。我怎么能这样做?
答案 0 :(得分:2)
我已经习惯了这个想法了一段时间,
避免轮询或设置websockets进行推送的东西,
一种方法是创建一个挂起的Flash消息表,按created_at
对其进行索引,使其成为用户模型的has_many关系,并在应用程序控制器上设置before_filter
以呈现闪存消息发生在last_request_at
之后。
例如,您设置了一个名为User#message
的好用户方法,并说出some_user.message "blah blah"
,它会将消息呈现给用户。
下行是很多可能的垃圾邮件,但由于flash消息表只是时间戳,外键和字符串列,这实际上应该非常高效。但是,考虑到您选择的beanstalkd,这可能不适合您。
计划B(假设您不需要闪存持久化),您可以将消息保留在Rails.cache
中,并在渲染时清除缓存。
只需确保它全部包含在一个漂亮的抽象API中,例如some_user.message
,您就可以轻松地在不同方法之间切换