geocode_ip_address, кроме определенных контроллеров

Я добавил geocode_ip_address в ApplicationController, чтобы я мог получить информацию о местоположении пользователя из их сеанса.

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

Так как его называют как geocode_ip_address а не как before_filter Я не могу использовать skip_before_filter

Любая идея?

2 ответа

Решение

На самом деле он использует фильтр store_ip_location, так что вы можете положить

skip_before_filter :store_ip_location

При этом он сохраняет результат геокода в файле cookie, который проверяется перед выполнением вызова службы, поэтому последующие вызовы не должны сильно влиять на производительность.

Вы можете выборочно НЕ вызывать код, основанный на контроллере, в котором вы находитесь, вот так:

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
Другие вопросы по тегам