Как получить именованный маршрут из приложения Rack, размещенного в Rails 3? - PullRequest
5 голосов
/ 13 апреля 2011

Можно ли получить значение именованного маршрута из с помощью пользовательского приложения стойки, когда приложение смонтировано на направляющих 3 (в моем случае это приложение Sinatra)?

Простое использование маршрута (login_path) вызывает исключение для неопределенной локальной переменной.

UPDATE:

Вот пример того, что я пытаюсь сделать:

before do
 redirect login_path unless some_condition
end

Приложение монтируется с

mount App.new, :at => '/path'

Эта часть работает, как и ожидалось.

Спасибо, Скотт

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Доступ к маршрутам приложения хост-рельсов в смонтированном Sinatra может быть не очень элегантным, поскольку размещенный Sinatra не должен знать о приложении, в котором оно размещено.

Так что вместо этого лучше сделать это в приложении rails.

Если вы используете устройство, вы можете окружить свой блок монтирования следующим образом:

authenticate "user" do
  mount App.new, :at => '/path'
end

Это можно сделать, потому что сам devise является промежуточным программным обеспечением, добавленным перед маршрутом.

Разработайте это как:

def authenticate(scope)
  constraint = lambda do |request|
    request.env["warden"].authenticate!(:scope => scope)
  end
  constraints(constraint) do
    yield
  end
end

Если вы не используете devise, вам может потребоваться реализовать нечто подобное.

0 голосов
/ 31 мая 2011

Я думаю, что это невозможно, потому что они имеют отдельный код.Вы просто говорите рельсам, что делать с определенными путями, и он направляет эти запросы другому стоечному приложению , они ничего не сообщают о внутреннем коде.

возможно, вы можете написатьнекоторый код, чтобы сказать Синатре, как читать маршруты рельсов.хорошее место для начала:

http://apidock.com/rails/ActionDispatch

...