在 Rails 应用程序中,我使用 Faye(机架适配器)来推送通知(用于聊天)。
我想将 Faye 用于另一个用例(更多推送通知),但我似乎无法弄清楚。
在我的应用程序中,可以从后台作业创建模型,因此我想在创建模型时刷新我的视图之一(例如索引操作)。
Like so:
应用程序/模型/post.rb
class Post
include Mongoid::Document
after_create :notify_subscribers
private
def notify_subscribers
Faye::Client.publish("/posts")
end
end
应用程序/视图/帖子/index.html.erb
<%= subscribe_to(posts_url) do %>
uhh what do I do here? ajax call to refresh the whole page??
<% end %>
那么直接从 after_create 回调发布通知是一个好主意吗
当我从 Faye 服务器收到消息时,如何实施“更新”?
我是否只需执行 AJAX 调用即可从服务器重新加载数据?这样看来会很慢。
此外,我想使用类似的东西来更新模型(假设用户添加了一些评论或作者更改了内容),因此一直对数据库进行攻击似乎不是一个好的计划......
首先,是的,发布通知after_create
很好。你应该在你的notify_subscribers
方法是在客户端中发布您要使用的新帖子的所有相关信息,以便您don't收到通知后必须发出另一个不必要的 AJAX 请求。
因此,举例来说,如果title
and content
帖子的内容与用户在创建后立即查看相关,您可以执行以下操作:
def notify_subscribers
client = Faye::Client.new('http://localhost:3000/faye')
client.publish("/posts/new", {
'title' => self.title,
'content' => self.content
})
end
...然后,在视图中,您可能会使用 jQuery 来使用从服务器收到的新帖子的数据。 Rails 代码在这里对你没有帮助。例如。你会这样做(假设你使用 jQuery 并在你的标头中包含 faye.js):
<script type="text/javascript">
$(function() {
var client = new Faye.Client('http://localhost:3000/faye');
client.subscribe("/posts/new", function(data) {
/* do whatever you need with data */
});
});
</script>
最后,如果您想要传输的信息太复杂而无法作为通知的一部分进行传输,或者您已经有用于更新视图的现有 AJAX 流程,您可以只发布帖子的 ID 并使用 jQuery 触发 AJAX 调用subscribe
回调函数。不过,只有在必要时我才会推荐这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)