Распознавание маршрутов в сеансе консоли rails
скажем, у меня есть помощник маршрутизатора, о котором я хочу получить дополнительную информацию, например blogs_path, как мне узнать инструкции map за этим в консоли.
Я попытался создать и распознать, и я получил нераспознанную ошибку метода, даже после того, как я потребовал 'config/routes.rb'
5 ответов:
есть хорошее резюме с примерами на Zobie блог показывает, как вручную проверить сопоставление URL-адреса с контроллером / действием и наоборот. Например, начните с
r = Rails.application.routes
для доступа к объекту routes (страница Zobie, пару лет назад, говорит использовать
ActionController::Routing::Routes
, но теперь это устарело в пользуRails.application.routes
). Затем вы можете проверить маршрутизацию на основе URL:>> r.recognize_path "/station/index/42.html" => {:controller=>"station", :action=>"index", :format=>"html", :id=>"42"}
и посмотрите, какой URL генерируется для данного контроллера / действия / параметров комбинация:
>> r.generate :controller => :station, :action=> :index, :id=>42 => /station/index/42
Спасибо, Zobie!
в консоли приложения Rails 3.2:
# include routing and URL helpers include ActionDispatch::Routing include Rails.application.routes.url_helpers # use routes normally users_path #=> "/users"
в основном (если я правильно понял ваш вопрос) это сводится к включению модуля UrlWriter:
include ActionController::UrlWriter root_path => "/"
или вы можете добавить приложение к вызовам в консоли, например:
ruby-1.9.2-p136 :002 > app.root_path => "/"
(Это все рельсы В. 3.0.3)
если вы видите ошибки, как
ActionController::RoutingError: No route matches
где он должен работать, вы можете использовать rails gem или двигатель, который делает что-то вроде Spree, где он добавляет маршруты, вам может потребоваться сделать что-то еще для просмотра маршрутов в консоли.
в случае Шпрее, это находится в файле маршрутов
Spree::Core::Engine.routes.prepend do ... end
и работать, как @ mike-blythe предлагает, вы бы тогда сделали это раньше
generate
илиrecognize_path
.r = Spree::Core::Engine.routes