Rails - 异步作业后更新flash消息

时间:2014-01-25 02:20:32

标签: ruby-on-rails beanstalkd

我正在使用beanstalkd plus backburner来运行异步作业,我希望在每个作业完成执行后自动更新flash消息和一些信息。

作业完成后,我可以在控制器上获取flash消息。页面刷新后,将显示Flash消息。但我想要的是消息本身出现。我怎么能这样做?

1 个答案:

答案 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中,并在渲染时清除缓存。

A / B混合解决方案是将这些消息放入mongo,redis等

只需确保它全部包含在一个漂亮的抽象API中,例如some_user.message,您就可以轻松地在不同方法之间切换