Не нарушены ли маршруты по умолчанию с движками Rails 3? - PullRequest
3 голосов
/ 23 сентября 2010

У меня есть движок Rails 3, предназначенный для базовой аутентификации и авторизации пользователей.В пределах этого самоцвета config/routes.rb определяет следующее

resources :users
match '/:controller(/:action(/:id))'

Когда я делаю rake routes из приложения, которое требует этот драгоценный камень, я получаю следующие маршруты

rake routes|grep users
users GET   /users(.:format)               {:controller=>"users", :action=>"index"}
users POST  /users(.:format)               {:controller=>"users", :action=>"create"}
new_user GET  /users/new(.:format)         {:controller=>"users", :action=>"new"}
edit_user GET  /users/:id/edit(.:format)   {:controller=>"users", :action=>"edit"}
user GET   /users/:id(.:format)            {:controller=>"users", :action=>"show"}
user PUT   /users/:id(.:format)            {:controller=>"users", :action=>"update"}
user DELETE /users/:id(.:format)           {:controller=>"users", :action=>"destroy"}

Вот чтоЯ ожидаю.

Однако, когда я пытаюсь получить доступ к следующим маршрутам через браузер

/users/137
/users/137/edit

Я получаю следующую ошибку в журналах

AbstractController::ActionNotFound (The action '137' could not be found for UsersController):
  actionpack (3.0.0) lib/abstract_controller/base.rb:114:in `process'
  actionpack (3.0.0) lib/abstract_controller/rendering.rb:40:in `process'
  ...

Что интересноявляется то, что следующие пути работают

/users/show/137
/users/edit/137

Также, если я добавлю следующее в файл rout.rb в приложении, которое требует гем, все это работает как положено.

resources :users

Есть ли что-то, чего мне не хватает или это ошибка?

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

RAILS_RELATIVE_URL_ROOT="/my_app"

и в config.ru

map '/my_app' do
  run MSEL::Application
end

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

Я испытал то же самое с драгоценным камнем, который я создавал.Маршруты движка загружаются после маршрутов приложения, и я думаю, что это может быть вашей проблемой.Взгляните на rake routes без подсказок для пользователя.Я подозреваю, что у вас есть маршрут в вашем приложении, который имеет приоритет над пользовательскими маршрутами.Если у вас в маршрутах приложения match '/:controller(/:action(/:id))', это будет иметь приоритет над маршрутом пользователя gem.Можно объяснить, почему работает / users / show / 137, а не маршруты RESTful.Может быть возможно загрузить ваши маршруты в инициализаторе движка, чтобы иметь приоритет над маршрутами приложения.Опубликуйте свои полные rake routes результаты, и это может помочь нам найти решение.

0 голосов
/ 11 января 2012

Для меня в Rails 3.1

root :to => 'ControllerName#Action'

Работает правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...