Rails: Как я могу получить доступ к «запросу» в классе папки lib?

Я пытаюсь реализовать веб-сокет через Faye Websocket.

До сих пор я мог реализовать промежуточное ПО для веб-сокета на серверной части и клиентском JS, чтобы открывать веб-сокет и отправлять и получать данные с обеих сторон.

Теперь на бэкэнде rails я обрабатываю сообщение веб-сокета, полученное через мой собственный класс внутри папки lib. Я хотел бы получить IP-адрес клиента (планирую добавить информацию user_agent, когда я решу получить IP-адрес) через «request.remote_ip» в myClass в папке lib, к сожалению, получить к нему прямой доступ невозможно.

Не могли бы вы подсказать, как я могу получить доступ к объекту "запрос" в папке lib?

lib / myClass.rb

class myClass
  ip_address = request.remote_ip


end

#<NameError: undefined local variable or method `request' for #<myClass:0x0055c6fb18d860>
Did you mean?  require>

передать request из контроллера в качестве параметра в библиотеку

Shamsul Haque 04.06.2018 17:22

Я не вызываю метод настраиваемого класса из контроллера. Я пытаюсь использовать веб-сокет .. И myClass обрабатывает сообщение, полученное через веб-сокет. Я также не предпочитаю отправлять клиентский IP-адрес в веб-сокете, который может быть изменен вручную.

Tolga 04.06.2018 17:26

Можете ли вы добавить больше контекста, например, где вызывается класс и когда запускается вызов?

iGian 04.06.2018 17:29

У меня есть промежуточное ПО Faye :: Websocket, которое прослушивает соединения с веб-сокетами. Внутри кода промежуточного программного обеспечения я вызываю myClass с сообщениями сокета в качестве параметров

Tolga 04.06.2018 17:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
157
2

Ответы 2

Используйте так: -

В lib/my_class.rb

class MyClass < Struct.new(:request)
  def self.call(request)
    new(request).call
  end

  def call
    ip_address = request.remote_ip
  end
end

И из some_controller: -

class SomeController < ApplicationController
  def some_method
    MyClass.call(request)
  end
end

поскольку я не звоню из ApplicationController, это невозможно

Tolga 04.06.2018 18:10

Я обнаружил, что объект Faye Websocket также хранит переменные среды, которые включают в себя IP-адрес клиента и информацию о пользовательском агенте, которую я искал.

  user_agent: socket.env["HTTP_USER_AGENT"],
  ip_address: socket.env["REMOTE_ADDR"]

Поэтому вместо объекта запроса я получил эту информацию напрямую из объекта Faye websocket.

Другие вопросы по теме