我很困惑,这是我的第一个Faye或Pub / Sub实现,如果这是一个基本问题,请原谅我。我还没有找到其他地方的答案。任何帮助表示赞赏。
如何从模型回调(after_commit,after_save等)调用和更新Rails视图页面?我需要一个javascript代码,一旦after_commit回调触发,视图更新将从views / meetings / _show_current_participants.js.erb运行。
如果我在视图上使用带有return => true
的link_to标记,我就可以设置它并使其工作以使javascript执行并查看更新。问题是我将不会有任何用户交互,并且需要仅根据数据库更改将视图更新推送到页面基础(因此在模型上进行after_commit回调)。这不是正确的工具/设计模式/方法吗?
我尝试在对http://localhost:3000/conferences/conference_id/_show_current_participants_url的after_commit回调上发出HTTP get请求,但是没有触发Faye / javascript在页面视图上执行。
这是:_show_current_participants.js.erb
<% participant_broadcast "/conferences/#{@conference.id}" do %>
alert('_show_current_participants.js.erb loaded');
$("#current_participants_js").html("<%= escape_javascript(render partial: 'conferences/show_current_participants.html', locals: { conference: @conference } ) %>");
<%end%>
如果我将其设置为使用remote =&gt;触发link_to标记时,这就像魅力一样真:
<li><%= link_to "Faye CALL", "#{@conference.id}/_show_current_participants", remote: true %></li>
如何修改此设置,而不必点击链接,在after_commit模型回调中激活Faye和后续部分的javascript?这是错误的方法吗?如何根据数据库更改告诉我的视图更新?任何帮助表示赞赏。非常感谢能够帮助我找到正确方向的善良灵魂。
版本:
Faye 1.2.4(不是faye-rails)
Rails 4.1.5
Ruby 2.3.0
在这一点上,不仅仅是一个非常漂亮的解决方案,我正在寻找有用的东西。
答案 0 :(得分:0)
您应该使用javascript回调订阅邮件:
<script>
$(function() {
// Create a new client to connect to Faye
var client = new Faye.Client('http://localhost:3000/conferences');
// Subscribe to the public channel
var public_subscription = client.subscribe('/#{@conference.id}/_show_current_participants', function(data) {
$("#current_participants_js").html(data);
});
});
</script>
我从中获取和调整此代码的参考:
https://code.tutsplus.com/tutorials/how-to-use-faye-as-a-real-time-push-server-in-rails--net-22600