需要帮助才能从模型获取remote_ip

时间:2018-08-30 11:43:31

标签: ruby-on-rails

嗨,我有一个模型中的现有项目(在a处调用),在最后一个模型中我需要一个模型(在b处调用),也就是获取客户端的ip,这个问题有点受限制。

  • 如果模型是从include添加的,则表示方法不适用
  • 其中一项限制是尽可能少地更改

对于我的问题来说,很简单,可以说我需要从控制器而不是从模型获取IP,并且它不能保存在任何地方,所以我可以通过什么方式获取IP。

p.s我确实尝试过request.remote_ip,但它不知道请求

如果可能的话,您能给我看一下链接或示例代码,以便我理解该怎么做。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作来获取客户端的远程IP,这是使用控制器的。

class TestsController < ApplicationController
  def get_ip
    ip = request.remote_ip
    Test.use_ip(ip)
  end
end

假设您有一个模型。我假设它是Test

class Test < ActiveRecord::Base

  def self.use_ip(ip)
    puts ip
  end

end

根据您的要求,这违反了Rails的惯例(这不是很好的做法)

在application_controller.rb中定义以下内容

before_filter :pass_request_around

def pass_request_around
  Thread.current[:request] = request
end

在模型中,请求对象现在应该可用

def get_ip
  request = Thread.current[:request]
  ip = request.remote_ip
end