Как получить request.uri в модели в Rails?
$request = request
Когда я напишу это в контроллере, он будет работать. Но если мне нужна эта переменная в контроллере модели или приложения, как я могу?
Ответы
Ответ 1
Модели существуют вне контекста веб-запроса. Вы можете создать их в irb, вы можете создать их в замедленной работе или script и т.д. Если модель зависела от объекта запроса, ни одна из этих вещей не была бы возможна.
Как говорит tsdbrown, вы должны каким-то образом передать эту информацию из контекста, использующего модель.
Ответ 2
Я получил его
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :beforeFilter
def beforeFilter
$request = request
end
end
Теперь мы можем использовать глобальную переменную $request в любом месте кода
Ответ 3
У вас нет доступа к объекту запроса в ваших моделях, вам нужно будет передать request.request_uri.
Возможно, с помощью специального метода. например @object.custom_method_call(params, request.request_uri)
Другим вариантом будет добавить attr_accessor :request_uri
в вашей модели и установить/передать, что в:
@object.update_attributes(params.merge(:request_uri => request.request_uri))
Ответ 4
вам нужно будет взломать запрос request.uri в модели. который не рекомендуется.
Вы должны передать его как параметр в методе, который определен в модели.