Распознавание маршрутов в сеансе консоли rails


скажем, у меня есть помощник маршрутизатора, о котором я хочу получить дополнительную информацию, например blogs_path, как мне узнать инструкции map за этим в консоли.

Я попытался создать и распознать, и я получил нераспознанную ошибку метода, даже после того, как я потребовал 'config/routes.rb'

5 52

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

запуск команды routes из каталога проекта отобразит вашу маршрутизацию:

rake routes

это то, что вы имели в виду?