除特定控制器外的geocode_ip_address

时间:2012-05-10 00:18:16

标签: ruby-on-rails ruby ruby-on-rails-3 geokit

我在ApplicationController中添加了geocode_ip_address,因此我可以从其会话中获取用户位置信息。

我有一些控制器,我不希望它们与Geokit进行核对。它确实减慢了应用程序,并且不需要在那里进行地理检查。

由于它被称为geocode_ip_address而不是before_filter,我无法使用skip_before_filter

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

它实际上使用了store_ip_location过滤器,因此您可以使用

skip_before_filter :store_ip_location

据说它将地理代码的结果存储在正在进行服务调用之前检查的cookie中,因此后续调用不会影响性能

答案 1 :(得分:-1)

您可以根据您所在的控制器选择性地不发送代码:

unless ["controller1", "controller2", "etc"].member?(params[:controller])
 geocode_ip_address
end

将不希望代码运行的控制器的名称放在列表中,并且不会在这些控制器中调用它。

您还可以创建一个常量,这是一个像这样的控制器列表:

CONTROLLERS_TO_NOT_FILTER_BY_GEOCODE = ["controller1", "controller2", "etc"]

unless CONTROLLERS_TO_NOT_FILTER_BY_GEOCODE.member?(params[:controller])
 geocode_ip_address
end