我对Rails几乎全新,或者我相信我会知道如何自己回答这个问题.我只是想修改基本的ActionCable演示中创建的基本聊天应用程序:https://medium.com/@dhh/rails-5-action-cable-demo-8bba4ccfc55e#.6lmd6tfi7
我没有只有一个聊天室,而是想拥有多个聊天室,所以我routes.rb通过添加以下行来修改我:
get '/rooms/show/:topic', to: 'rooms#show'
所以现在我可以根据不同的主题访问不同的聊天室.房间控制器/app/controllers/rooms_controller.rb处理这些路线没有问题:
class RoomsController < ApplicationController
def show
@topic = params[:topic]
@messages = Message.all
end
end
Run Code Online (Sandbox Code Playgroud)
但是这个参数没有传递给app/channels/room_channel.rb我,我只是不确定我需要做什么修改.我目前的尝试:
class RoomChannel < ApplicationCable::Channel
def subscribed
stream_from "room_channel_#{params[:topic]}"
end
Run Code Online (Sandbox Code Playgroud)
只返回"room_channel_"
wbr*_*tra 11
这里的问题是我无法理解调用订阅方法的位置,因此不知道如何将参数传递给它.
通过阅读actioncable文档:https://github.com/rails/rails/tree/master/actioncable
我发现订阅的方法是通过客户端 javascript 调用的,而不是通过rails控制器调用的.在示例聊天应用程序的情况下,这意味着我必须更改文件的第一行/app/assets/javascripts/channels/room.coffee
App.room = App.cable.subscriptions.create "RoomChannel",
Run Code Online (Sandbox Code Playgroud)
至
App.room = App.cable.subscriptions.create { channel: "RoomChannel", topic: topic},
Run Code Online (Sandbox Code Playgroud)
将javascript对象传递给此方法允许我在subscribed方法中访问这些参数rooms_controller.rb.