Получение неопределенной локальной переменной или метода с помощью Action Cable, вызывающего метод класса из модели, rails - PullRequest
0 голосов
/ 07 октября 2018

Я получаю сообщение об ошибке, используя кабель действия,

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
...

Насколько мне известно, и используя контроллеры и модели, я могу вызвать метод класса after_commit -> {MicropostNotificationsChannel.notify(self)}, а затем перейти к self.notifiy(notification) и затем какconnections_info - это метод экземпляра, я должен иметь возможность вызывать его внутри этого класса и выполнять свой код, но я получаю здесь ошибку?

class Notification < ApplicationRecord
  ...
  after_commit -> {MicropostNotificationsChannel.notify(self)}
end

Канал уведомления микросообщений кабеля действия

class MicropostNotificationsChannel < ApplicationCable::Channel

  def subscribe
    ...
  end

  def unsubscribe
    ...
  end

  def self.notifiy(notification)
    connection_results = connections_info
    puts connection_results.inspect
  end
end

Channel.rb

module ApplicationCable
  class Channel < ActionCable::Channel::Base

    def connections_info
      # do stuff here
    end
  end
end

1 Ответ

0 голосов
/ 07 октября 2018

Вы определили connections_info как метод экземпляра в ApplicationCable::Channel, но notify является методом класса, и поэтому он ищет методы на уровне класса, а не на уровне экземпляра.Иногда классы могут обойти это, используя method_missing, но не похоже, что Action Cable делает это с первого взгляда.Не зная больше о том, что вы пытаетесь сделать, трудно сказать, следует ли заменить connections_info на метод класса, notify на метод экземпляра или что-то еще.

...