Rails:我如何访问"请求"在lib文件夹类中?

时间:2018-06-04 15:12:47

标签: ruby-on-rails ruby-on-rails-4 websocket

我正在尝试通过Faye Websocket实现websocket。

到目前为止,我能够在后端和客户端JS上实现websocket中间件,以打开websocket并在两端发送和接收数据。

现在在rails后端,我正在处理通过lib文件夹中的自定义类接收的websocket消息。我想通过" request.remote_ip"来获取客户端IP地址(计划在我解决获取IP地址时添加user_agent信息)。在lib文件夹中的myClass中,遗憾的是无法直接访问它。

您能指导我如何访问"请求" 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>

2 个答案:

答案 0 :(得分:0)

使用: -

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

答案 1 :(得分:0)

我发现,Faye Websocket对象还存储了环境变量,其中包括我正在寻找的客户端IP地址和用户代理信息。

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

因此,我直接从Faye websocket对象中获取了这些信息,而不是请求对象。