#ruby-on-rails #ruby-on-rails-3 #routes #rack
#ruby-on-rails #ruby-on-rails-3 #маршруты #rack
Вопрос:
Возможно ли получить значение именованного маршрута из с помощью в пользовательском приложении rack, когда приложение смонтировано в rails 3 (в моем случае приложение Sinatra)?
Простое использование маршрута (login_path) вызывает исключение для неопределенной локальной переменной.
Обновить:
Вот пример того, что я пытаюсь сделать:
before do
redirect login_path unless some_condition
end
Приложение монтируется с
mount App.new, :at => '/path'
Эта часть работает так, как ожидалось.
Спасибо, Скотт
Комментарии:
1. Я этого не пробовал, но они случайно не отображаются в списке при запуске
rake routes
не так ли?2. Пожалуйста, покажите нам, как монтируется ваше приложение.
3. @Ryan — Мое приложение смонтировано с помощью mount App.new, :at => ‘/ path’ Это работает, как ожидалось. Мой вопрос заключался в том, как на самом деле использовать именованные маршруты из with в моем приложении. Я дополню свой первоначальный вопрос лучшим примером.
Ответ №1:
Доступ к маршрутам приложения rails, размещенного в смонтированном Sinatra, может быть не очень элегантным, поскольку размещенный Sinatra не должен знать о приложении, в котором он размещен.
Поэтому вместо этого лучше сделать это в приложении rails.
Если вы используете devise, вы можете окружить свой блок монтирования следующим образом:
authenticate "user" do
mount App.new, :at => '/path'
end
Это можно сделать, потому что devise сам по себе является промежуточным программным обеспечением, добавленным перед route.
Devise реализует это как:
def authenticate(scope)
constraint = lambda do |request|
request.env["warden"].authenticate!(:scope => scope)
end
constraints(constraint) do
yield
end
end
Если вы не используете devise, возможно, вам потребуется реализовать что-то подобное.
Ответ №2:
Я думаю, что это невозможно, потому что у них отдельный код. Вы просто указываете rails, что делать с определенными путями, а оно направляет эти запросы в другое приложение rack, они ничего не сообщают о внутреннем коде.
может быть, вы можете написать какой-нибудь код, чтобы сообщить Sinatra, как читать rails routes. хорошее место для начала: