在lib目录下的类中使用"params"和"cookies"方法 - rails 3

rtd*_*tdp 2 ruby-on-rails ruby-on-rails-3

我在lib文件夹下创建了一个类来处理一些地理位置逻辑.此类是从控制器方法启动的.我希望这个类能够处理有关地理位置的所有问题,其中包括 - 查询外部api以从ip查找国家/地区,如果找到国家/地区则设置Cookie(以便在用户的每个请求时不会调用外部api).说,

class GeoLocation
end
Run Code Online (Sandbox Code Playgroud)

现在,在这个类中,我想访问"params"方法来访问参数以及"cookies"方法来设置cookie并访问它们.

那么我应该在这个类中包含什么才能使这些方法起作用.我尝试过 -

class GeoLocation
    include ActionController
    include ActionController::Cookies
end
Run Code Online (Sandbox Code Playgroud)

但这会给出错误.

我也尝试过这个 -

class GeoLocation < ActionController::Base 
Run Code Online (Sandbox Code Playgroud)

但没用.那么,我应该怎么做,或者有更好的替代方法.

Bre*_*der 6

paramscookies哈希值仅适用于你的控制器和视图.您无法在课程中访问它们.您必须定义操作类中的params/cookie哈希的方法,并从控制器传递它们.

class Geolocation
  def initialize params, cookies
    @parameters = params
    @cookies = cookies
  end
end
Run Code Online (Sandbox Code Playgroud)

在你的控制器中:

def index
  geo = Geolocation.new(params, cookies)
  geo.parameters #parameter hash
  geo.cookies #cookies object
end
Run Code Online (Sandbox Code Playgroud)

您可能想要阅读ruby中的实例变量.