Это не рекомендуется с архитектурной точки зрения, но используется только для низкоуровневой регистрации глубоко внутри модели и не приносит никакого вреда. Также это поточно-ориентированное решение.
ApplicationController или просто один контроллер:
around_filter :store_remote_ip_in_thread
def store_remote_ip_in_thread
begin
Thread.current[:remote_ip] = request.remote_ip
yield
ensure
Thread.current.delete :remote_ip
end
end
Многоразовый модуль для поиска:
module RemoteIpAware
def current_remote_ip
Thread.current[:remote_ip] || '-'
end
end
Где-то в классе модель / почтовик / библиотека:
include RemoteIpAware
...
#use current_remote_ip method anywhere
Имейте в виду, я написал это из моей памяти .. синтаксис может быть не в порядке;)
В вашем случае вместо удаленного IP вы можете сохранить параметры [: action]: имя контроллера и т.д ..