Ruby on rails 使用Action Cable从模型rails调用类方法获取未定义的局部变量或方法
我在使用action cable时出错Ruby on rails 使用Action Cable从模型rails调用类方法获取未定义的局部变量或方法,ruby-on-rails,actioncable,Ruby On Rails,Actioncable,我在使用action cable时出错 NameError (undefined local variable or method `connections_info' for MicropostNotificationsChannel:Class): app/channels/micropost_notifications_channel.rb:12:in `notify' app/models/notification.rb:8:in `block in <class:Notific
NameError (undefined local variable or method `connections_info' for MicropostNotificationsChannel:Class):
app/channels/micropost_notifications_channel.rb:12:in `notify'
app/models/notification.rb:8:in `block in <class:Notification>'
app/controllers/likes_controller.rb:11:in `create'
Rendering C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb
...
action cable micropost通知频道
class MicropostNotificationsChannel < ApplicationCable::Channel
def subscribe
...
end
def unsubscribe
...
end
def self.notifiy(notification)
connection_results = connections_info
puts connection_results.inspect
end
end
class MicroPostNotificationsAnnel
Channel.rb
module ApplicationCable
class Channel < ActionCable::Channel::Base
def connections_info
# do stuff here
end
end
end
模块应用程序表
类通道
您在applicationable::Channel
中将connections\u info
定义为一个实例方法,但是notify
是一个类方法,因此它在类级别而不是实例级别寻找方法。有时,类会通过使用方法\u missing
来解决这个问题,但看起来Action Cable并不是一眼就能做到的。如果不了解更多有关您正在尝试执行的操作的信息,很难说是否要将connections\u info
更改为类方法、notify
更改为实例方法或其他任何操作。您已经在applicationable::Channel
中将connections\u info
定义为实例方法,但是notify
是一个类方法,因此它在类级别而不是实例级别寻找方法。有时,类会通过使用方法\u missing
来解决这个问题,但看起来Action Cable并不是一眼就能做到的。如果不了解更多您正在尝试执行的操作,很难说是否要将connections\u info
更改为类方法,notify
更改为实例方法,或者别的什么。连接\u info
正在获取ActionCable
存储的所有用户对象,以便我可以获取谁在哪个频道上,并将通知记录保存到db以及推送动态通知。当建立连接时,我可以从subscribe
调用notfify
作为实例方法。但我不想从那里打电话给它。我从来不知道必须从实例方法而不是类方法中调用实例方法。有什么原因吗?对不起,我想我现在明白了。谢谢你!我能问一下吗?我需要掌握所使用的ActionCable实例吗?@Leeether我对ActionCable不太熟悉,所以可以单独问一个问题。但是看看,发送通知的推荐方式似乎是从调用stream\u,或者在subscribed
回调中为调用stream\u,然后调用microstostnotificationschannel.broadcast\u到(…)
。除非你正在做一些更高级的事情,否则你不必知道任何时候所有的用户都是谁。谢谢@max。我已经像你说的那样设置了action cable,但它更高级。我想为用户订阅帖子时创建通知,因此不仅像您所说的使用stream\u from
将用户连接到帖子,我还想为创建通知时连接的每个用户在db中记录一条记录。因此,尝试访问ActionCable实例是我所寻找的,它在客户端为每个用户保留一个副本,但我正在研究如何获得MicroPostNotificationsAnnel
实例。没有帮助我还是ruby的新手,但我会看看我会怎么做@Leeether是的,也许最好问一个新问题,关注这个问题。你可能会让一些比我更有经验的人加入进来connections\u info
正在获取ActionCable
存储的所有用户对象,以便我可以获取谁在哪个频道上,并将通知记录保存到db以及推送动态通知。当建立连接时,我可以从subscribe
调用notfify
作为实例方法。但我不想从那里打电话给它。我从来不知道必须从实例方法而不是类方法中调用实例方法。有什么原因吗?对不起,我想我现在明白了。谢谢你!我能问一下吗?我需要掌握所使用的ActionCable实例吗?@Leeether我对ActionCable不太熟悉,所以可以单独问一个问题。但是看看,发送通知的推荐方式似乎是从调用stream\u,或者在subscribed
回调中为调用stream\u,然后调用microstostnotificationschannel.broadcast\u到(…)
。除非你正在做一些更高级的事情,否则你不必知道任何时候所有的用户都是谁。谢谢@max。我已经像你说的那样设置了action cable,但它更高级。我想为用户订阅帖子时创建通知,因此不仅像您所说的使用stream\u from
将用户连接到帖子,我还想为创建通知时连接的每个用户在db中记录一条记录。因此,尝试访问ActionCable实例是我所寻找的,它在客户端为每个用户保留一个副本,但我正在研究如何获得MicroPostNotificationsAnnel
实例。没有帮助我还是ruby的新手,但我会看看我会怎么做@Leeether是的,也许最好问一个新问题,关注这个问题。你可能会让一些比我更有经验的人加入进来!
module ApplicationCable
class Channel < ActionCable::Channel::Base
def connections_info
# do stuff here
end
end
end