Ответ 1
Победа!
include ActionView::Helpers
include ActionDispatch::Routing
include Rails.application.routes.url_helpers
У меня есть модель с полем типа "тип" и поле "значение". Поле типа будет определять, как "значение" анализируется перед рендерингом. Я хочу, чтобы это было легко расширяемым, поэтому я помещаю различные классы "formatter" в свою папку lib.
Один из моих "форматировщиков" имеет вызов url_for:
class CustomTypeFormatter
include ActionView::Helpers::TextHelper
include ActionView::Helpers
def show
raw sanitize( auto_link( value ) )
end
def get_url(page)
url_for( :controller => :my_controller, :action => :show, :path => page.path )
end
end
Проблема в том, что url_for поднимает эту ошибку:
undefined local variable or method `_routes'
Я думаю, что я просто отсутствую. Кто-нибудь знает, что это должно быть?
** UPDATE ***
Здесь часть трассировки стека:
actionpack (3.0.7) lib/action_dispatch/routing/url_for.rb:131:in `url_for'
actionpack (3.0.7) lib/action_view/helpers/url_helper.rb:99:in `url_for'
Итак, я думаю, что это должна быть зависимость от ActiveDispatch, хотя я не могу понять
Победа!
include ActionView::Helpers
include ActionDispatch::Routing
include Rails.application.routes.url_helpers
В качестве альтернативы url_for вы можете использовать Rails.application.routes.url_helpers
, просто добавив в маршрут :as
, как в следующем примере:
get "sessions/destroy/:param_id", as: :logout
так что вы можете использовать его следующим образом:
Rails.application.routes.url_helpers.logout_path(:param_id => your_value)
Это будет сделано так же, как url_for
Надеюсь, это поможет