how to send message to all client except sender in rails/actioncable?

前端 未结 2 2111
面向向阳花
面向向阳花 2021-02-07 14:20

in socket.io, you can send message to all client except sender like:

socket.broadcast.emit(\'user connected\');

but in rails/actioncable, how t

相关标签:
2条回答
  • 2021-02-07 15:06

    Using jobs, you can make this with the logic in a partial.
    In your model after create a record, call the job perform passing the self record. See bellow how pass message to recieved data(at channel) using broadcast.

       ...  
    
       def perform(message)
         ActionCable.server.broadcast "board:#{params[:board]}",
         message: render_message(message)
       end
    
       private
    
       def 
         ApplicationController.renderer.render(
           partial: 'messages/message.html.erb',
           locals: { message: message }
         )
       end  
    

    Create a partial in views/messages/_message.html.erb and in your code make

     <%= if message.sender_id == current_user.id %>
       The code to report that forwarded message.
     <%= else %>
       The code to send the message to all except sender.
     <% end %>
    
    0 讨论(0)
  • 2021-02-07 15:11

    I have been worrying about this problem all afternoon. All ready to give up, just lying in bed, my mind flashed a solution it works! ! ! Sign in to share

     class BoardChannel < ApplicationCable::Channel
       def subscribed
         stream_from "board:#{params[:board]}"
         stream_from "global_stream"
       end
     end
    

    Then, when you want to broadcast all users, you can:

    ActionCable.server.broadcast "global_stream", "some messages"
    

    Of course, you can also broadcast to special users. you can:

    ActionCable.server.broadcast "board:#{params[:board]}", "some messages"
    
    

    Perfect!!!

    0 讨论(0)
提交回复
热议问题