Как получить 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 в модели. который не рекомендуется. Вы должны передать его как параметр в методе, который определен в модели.