Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 on rails 难以理解ActionCable_Ruby On Rails_Ruby_Cloud9 Ide_Actioncable - Fatal编程技术网

Ruby on rails 难以理解ActionCable

Ruby on rails 难以理解ActionCable,ruby-on-rails,ruby,cloud9-ide,actioncable,Ruby On Rails,Ruby,Cloud9 Ide,Actioncable,我已经看了几天ActionCable,我发现很难理解如何使用它。在看了各种例子后,观看了YouTube视频 阅读了一些Ruby Edge指南后,我仍然不确定如何在我的项目中实现它 我试图从广播表中获取前20个结果,并将它们放入application.html.erb的“提要”div中。下面是该div的代码: <div class="content"> <div id="feed"> <h1>TEST</h1> </div>

我已经看了几天ActionCable,我发现很难理解如何使用它。在看了各种例子后,观看了YouTube视频 阅读了一些Ruby Edge指南后,我仍然不确定如何在我的项目中实现它

我试图从广播表中获取前20个结果,并将它们放入application.html.erb的“提要”div中。下面是该div的代码:

<div class="content">
  <div id="feed">
    <h1>TEST</h1>
  </div>
  <%= yield %>
</div>
这是“饲料,咖啡”:

这里是“feeds_channel.rb”:

很明显,我在做一些愚蠢的事情,不知道在哪里。这是控制台输出的打印输出

我在控制台中查看了一下,在客户端做了一些挖掘,发现当我键入“App.feeds.received.data”时,它返回为“undefined”,我缺少哪些部分来让它工作?
谢谢。

我认为您不应该使用订阅的方式进行广播。您需要的只是:

def subscribed
   stream_from "feed"
end
在页面加载时,当页面最初呈现时,您应该在提要div中呈现您想要的所有广播消息,然后,如果提要中添加了任何内容,您就可以向所有客户端广播。如果所有客户端都订阅了源并从源进行流式传输,则应在每个客户端浏览器中更新

在服务器端,只要在模型或控制器中创建了新的广播对象,就可以添加:

ActionCable.server.broadcast "feed", messages: new_broadcast_object
Action Cable正在发送JSON,因此您不能通过web套接字直接发送ruby对象并将数据附加到客户端javascript中。确保您的消息是html字符串,或者如果需要在客户端对其进行操作,请将新的\u broadcast\u对象转换为JSON。

以下内容清楚地说明了如何开始使用ActionCable。
# Be sure to restart your server when you modify this file. Action Cable runs in a loop that does not support auto reloading.
class FeedsChannel < ApplicationCable::Channel
  def subscribed
        messages = Broadcast.all
       stream_for messages
       ActionCable.server.broadcast("FeedsChannel", messages.last(20))
  end

  def unsubscribed
    # Any cleanup needed when channel is unsubscribed
  end
end
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://0.0.0.0:8080
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.6.2 (ruby 2.3.0-p0), codename: Sleepy Sunday Serenity
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:8080
Use Ctrl-C to stop
Started GET "/" for 144.124.4.228 at 2016-11-24 12:13:51 +0000
Cannot render console from 144.124.4.228! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
  ActiveRecord::SchemaMigration Load (1.8ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by HomeController#index as HTML
  Rendering home/index.html.erb within layouts/application
  Rendered home/index.html.erb within layouts/application (2.2ms)
  Rendered sessions/_login.html.erb (1.8ms)
Completed 200 OK in 709ms (Views: 692.0ms | ActiveRecord: 0.0ms)


Started GET "/cable" for 144.124.4.228 at 2016-11-24 12:13:54 +0000
Cannot render console from 144.124.4.228! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Started GET "/cable/" [WebSocket] for 144.124.4.228 at 2016-11-24 12:13:54 +0000
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
  User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 41], ["LIMIT", 1]]
Registered connection (Z2lkOi8vY3NhL1VzZXIvNDE)
  Broadcast Load (2.0ms)  SELECT  "broadcasts".* FROM "broadcasts" ORDER BY "broadcasts"."id" DESC LIMIT ?  [["LIMIT", 20]]
[ActionCable] Broadcasting to FeedsChannel: [#<Broadcast id: 38, content: "Hello From APP!!!\n", user_id: 41, created_at: "2016-11-18 16:24:38", updated_at: "2016-11-18 16:24:38">, #<Broadcast id: 39, content: "Hello from MrPaul's App\n", user_id: 41, created_at: "2016-11-18 18:07:41", updated_at: "2016-11-18 18:07:41">, #<Broadcast id: 40, content: "New app test 2", user_id: 41, created_at: "2016-11-18 18:09:13", updated_at: "2016-11-18 18:09:13">, #<Broadcast id: 41, content: "ALALLALALALALA", user_id: 41, created_at: "2016-11-18 19:13:40", updated_at: "2016-11-18 19:13:40">, #<Broadcast id: 42, content: "LALALA TETS", user_id: 41, created_at: "2016-11-18 19:19:09", updated_at: "2016-11-18 19:19:09">, #<Broadcast id: 43, content: "Tets from app fro feeds", user_id: 41, created_at: "2016-11-18 19:37:38", updated_at: "2016-11-18 19:37:38">, #<Broadcast id: 44, content: "fsfsdf", user_id: 41, created_at: "2016-11-18 19:38:14", updated_at: "2016-11-18 19:38:14">, #<Broadcast id: 45, content: "Test from app tesrers", user_id: 41, created_at: "2016-11-18 19:38:48", updated_at: "2016-11-18 19:38:48">, #<Broadcast id: 46, content: "lalalalal", user_id: 41, created_at: "2016-11-21 17:26:55", updated_at: "2016-11-21 17:26:55">, #<Broadcast id: 47, content: "cdsc", user_id: 41, created_at: "2016-11-21 17:51:25", updated_at: "2016-11-21 17:51:25">, #<Broadcast id: 48, content: "nohonnl", user_id: 41, created_at: "2016-11-21 18:12:22", updated_at: "2016-11-21 18:12:22">, #<Broadcast id: 49, content: "rewrewwrwr", user_id: 41, created_at: "2016-11-22 12:45:16", updated_at: "2016-11-22 12:45:16">, #<Broadcast id: 50, content: "sefewr", user_id: 41, created_at: "2016-11-22 14:45:19", updated_at: "2016-11-22 14:45:19">, #<Broadcast id: 51, content: "fdsfdsfsd", user_id: 41, created_at: "2016-11-22 16:41:04", updated_at: "2016-11-22 16:41:04">, #<Broadcast id: 52, content: "trrretretr", user_id: 41, created_at: "2016-11-22 17:40:20", updated_at: "2016-11-22 17:40:20">, #<Broadcast id: 53, content: "fdsfsdfsd", user_id: 41, created_at: "2016-11-22 17:47:05", updated_at: "2016-11-22 17:47:05">, #<Broadcast id: 54, content: "fdsds", user_id: 41, created_at: "2016-11-22 18:05:17", updated_at: "2016-11-22 18:05:17">, #<Broadcast id: 55, content: "fdsfs", user_id: 41, created_at: "2016-11-22 18:23:44", updated_at: "2016-11-22 18:23:44">, #<Broadcast id: 56, content: "iyuirriry", user_id: 41, created_at: "2016-11-22 18:32:00", updated_at: "2016-11-22 18:32:00">, #<Broadcast id: 57, content: "fdsfsfs", user_id: 41, created_at: "2016-11-23 15:23:08", updated_at: "2016-11-23 15:23:08">]
FeedsChannel is transmitting the subscription confirmation
def subscribed
   stream_from "feed"
end
ActionCable.server.broadcast "feed", messages: new_broadcast_object