Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Faye和Rails的私人消息_Ruby_Ruby On Rails 4_Messaging_Faye_Railscasts - Fatal编程技术网

Ruby Faye和Rails的私人消息

Ruby Faye和Rails的私人消息,ruby,ruby-on-rails-4,messaging,faye,railscasts,Ruby,Ruby On Rails 4,Messaging,Faye,Railscasts,我正在使用允许应用程序推送消息的功能。问题是它将消息推送到所有打开的聊天客户端。我需要他们保密。可以通过faye获得私人消息,但它是基于url的。例如,所有消息都将发送到site.com/foo。但是,在我的模型中,聊天没有特定的url。因为聊天只是该用户发送给您的消息的集合 因此,如果你以adamsite.com/messages/eve的身份登录,你可以与夏娃交谈,但对夏娃来说则相反site.com/messages/adam。因此,特定于URL的私人聊天似乎是不可能的 有什么建议吗 消息\

我正在使用允许应用程序推送消息的功能。问题是它将消息推送到所有打开的聊天客户端。我需要他们保密。可以通过faye获得私人消息,但它是基于url的。例如,所有消息都将发送到
site.com/foo
。但是,在我的模型中,聊天没有特定的url。因为聊天只是该用户发送给您的消息的集合

因此,如果你以adam
site.com/messages/eve
的身份登录,你可以与夏娃交谈,但对夏娃来说则相反
site.com/messages/adam
。因此,特定于URL的私人聊天似乎是不可能的

有什么建议吗

消息\u controller.rb(触发ajax)

create.js.erb(调用广播方法)

application.js(faye服务器订阅/messages/*)


我解决了!问题是我在application.js中有subscribe函数,这意味着它将在每个页面上运行subscribe javascript。相反,我所做的是在我订阅的聊天页面视图的底部
/messages/eve/adam
。我就是这样做的:

<script>  
  $(function(){
    var faye = new Faye.Client('http://localhost:9292/faye');
    var subscription = faye.subscribe('/messages/#{current_user.username}/#{@user.username}', function(message) {
      eval(message);
    });
  });
</script>
<% broadcast params[:message][:username] do %>
  $(".text-wrap").append("<%= current_user.name %> <%= @message.body %></div>");
<% end %>
def broadcast(user, &block)
  channel = "/messages/#{user}"
  message = {:channel => channel, :data => capture(&block)}
  uri = URI.parse("http://localhost:9292/faye")
  Net::HTTP.post_form(uri, :message => message.to_json)
end
$(function(){
    var faye = new Faye.Client('http://localhost:9292/faye');
    var subscription = faye.subscribe('/messages/*', function(message) {
        eval(message);
    });
});
<script>  
  $(function(){
    var faye = new Faye.Client('http://localhost:9292/faye');
    var subscription = faye.subscribe('/messages/#{current_user.username}/#{@user.username}', function(message) {
      eval(message);
    });
  });
</script>
def broadcast(user, &block)
  channel = "/messages/#{current_user.username}/#{user}"
  message = {:channel => channel, :data => capture(&block)}
  uri = URI.parse("http://localhost:9292/faye")
  Net::HTTP.post_form(uri, :message => message.to_json)
end