我正在尝试使用private_pub复制类似于 facebook 的推送通知系统。理想情况下,我想链接它以使用诸如gritter 之类的 gem 显示通知(欢迎其他 gem 建议)
每当调用来自控制器的某个操作时,我想向属于特定 ID 的所有订阅者发送通知。只要您登录,您就会订阅频道,通过将 放入subscribe_to
布局中来实现。
在视图中:
<%= subscribe_to "/messages/#{@group_id}" %>
在控制器中
PrivatePub.publish_to("/messages/#{@group_id}", "alert('test')")
这工作得很好,但是我希望有一些比alert
作为响应更复杂的东西(例如 grinter 通知),所以改为:
PrivatePub.publish_to("/messages/#{@group_id}", data: @some_data)
按照教程,他们为此使用咖啡脚本。但是,我无法发出简单的警报(可能是由于频道中的 id)
在这个问题中,OP 能够使用 js.erb 视图解决这个问题。但我无法让它工作。
免责声明:我的js和coffeescript知识几乎为零。
任何帮助表示赞赏:)
编辑
更多信息:我在控制器中有一个方法,它是公共 API 的一部分,并且需要 POST 请求。如果一切正常,它会发出 JSON 成功响应。除此之外,相同的方法会向特定组的所有用户发送通知。
我实际上已经设法让它工作,把它放在控制器中:
回调方法:
respond_to do |format|
format.js #-> calls callback.js.erb
#format.json { render json: {"success" => true}.to_json }
end
并将粗磨的东西放入my_api_controller/callback.js.erb
:
<% publish_to "/messages/#{@group_id}" do %>
<%= add_gritter(
"Nova " + link_to("reserva", reservation_path(@r)) + " de #{@channel} para " +
link_to(@hostel_name, hostel_path(@hostel_id)),
:title => "Nova reserva!",
:sticky => true,
:image => :notice
) %>
<% end %>
注意:由于订阅频道是在每个视图中完成的(通过布局),您可以在任何页面/视图上收到通知
我现在的问题是,你可以猜到,JSON 响应。由于我无法呈现两个响应,因此只调用了 js.erb,但从不发送 JSON 响应