【问题标题】:Rails 5 ActionCable establish stream from URL parametersRails 5 ActionCable 从 URL 参数建立流
【发布时间】:2017-10-25 18:20:59
【问题描述】:

我对 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

但是这个参数没有被传递给app/channels/room_channel.rb,我只是不确定我需要做哪些修改。我目前的尝试:

class RoomChannel < ApplicationCable::Channel
  def subscribed
    stream_from "room_channel_#{params[:topic]}"
  end

只返回“room_channel_”

【问题讨论】:

  • 参数在您的视图和控制器中可用。如果您要访问控制器中存在的路由,则可以p params.inspect 如果您不在视图或控制器中,则需要将值传入而不是从参数哈希中获取。

标签: ruby-on-rails


【解决方案1】:

这里的问题是我无法理解从哪里调用订阅的方法,因此不知道如何将参数传递给它。

通过阅读 actioncable 文档:https://github.com/rails/rails/tree/master/actioncable

我发现订阅的方法是通过 client-side javascript 调用的,而不是由 rails 控制器调用的。对于示例聊天应用程序,这意味着我必须更改文件 /app/assets/javascripts/channels/room.coffee 的第一行

App.room = App.cable.subscriptions.create "RoomChannel",

App.room = App.cable.subscriptions.create { channel: "RoomChannel", topic: topic},

将 javascript 对象传递给此方法允许我在 rooms_controller.rbsubscribed 方法中访问这些参数。

【讨论】:

  • 妈的,这么近!我刚刚在 github 分支上找到了 sn-p,我看到你发布了答案。好好研究!只需将 rooms_controller 更改为 rooms_channel
  • 是不是也需要在jobs中改?就像在聊天应用程序示例中一样,您是如何将参数传递给“ActionCable.server.broadcast 'room_channel'”的?
  • @wbruntra,我面临一个非常相似的问题,我无法弄清楚您是如何将 topic 对象传递给 Action Cable 的。你能详细说明你是如何做到的吗?谢谢!
【解决方案2】:

在 HTML 标记中设置topic_id,可能在布局文件中的body 标记中。

<body data-topic-id="<%= @topic.id %>">

现在像这样从 JS 中读取它:

document.querySelector('body').dataset.topicId

您的订阅创建行如下所示:

App.room = App.cable.subscriptions.create (channel: 'RoomChannel', topic_id: document.querySelector('body').dataset.topicId)

【讨论】:

    猜你喜欢
    • 2017-09-19
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 2016-11-22
    • 2021-09-29
    • 2017-03-13
    • 1970-01-01
    相关资源
    最近更新 更多