Странная ошибка маршрутизации в Rails 3.0 - PullRequest
4 голосов
/ 15 октября 2010

Я конвертировал приложение Rails 2.3.9 в Rails 3.0, и все шло хорошо.Я создал много маршрутов с новой системой, поэтому я чувствую, что знаю, как это сделать.Однако недавно я получил ошибку маршрутизации, которую не могу устранить.

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

resources :users do
  member do
    get 'activate'
    get 'edit_password'
    post 'update_password'
  end

  collection do
    get 'forgot_password'
    post 'send_reset_instructions'
  end
end

Неудачный маршрут - update_password.Если я изменю его на метод get, он будет работать.Но не при использовании в качестве сообщения, с данными, поступающими из формы в "edit_password".

Это сообщение об ошибке:

Routing Error

No route matches "/users/31/update_password"

Это (релевантный) вывод rake route :

                activate_user GET    /users/:id/activate(.:format)                               {:action=>"activate", :controller=>"users"}
           edit_password_user GET    /users/:id/edit_password(.:format)                          {:action=>"edit_password", :controller=>"users"}
         update_password_user POST   /users/:id/update_password(.:format)                        {:action=>"update_password", :controller=>"users"}
        forgot_password_users GET    /users/forgot_password(.:format)                            {:action=>"forgot_password", :controller=>"users"}
send_reset_instructions_users POST   /users/send_reset_instructions(.:format)                    {:action=>"send_reset_instructions", :controller=>"users"}
                        users GET    /users(.:format)                                            {:action=>"index", :controller=>"users"}
                        users POST   /users(.:format)                                            {:action=>"create", :controller=>"users"}
                     new_user GET    /users/new(.:format)                                        {:action=>"new", :controller=>"users"}
                    edit_user GET    /users/:id/edit(.:format)                                   {:action=>"edit", :controller=>"users"}
                         user GET    /users/:id(.:format)                                        {:action=>"show", :controller=>"users"}
                         user PUT    /users/:id(.:format)                                        {:action=>"update", :controller=>"users"}
                         user DELETE /users/:id(.:format)                                        {:action=>"destroy", :controller=>"users"}

Наконец, это вывод веб-сервера для этого запроса (webrick):

Started POST "/users/31/update_password" for 127.0.0.1 at 2010-10-14 23:30:59 +0200
  SQL (1.5ms)   SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'
  SQL (0.7ms)   SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'


ActionController::RoutingError (No route matches "/users/31/update_password"):


Rendered /home/jonatan/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.0ms)

Можете ли вы найти какую-либо логику в этом?

Я использую последние Rails, доступные через gem (3.0.1).Сначала я переопределил * to_param * в User-модели, чтобы использовать имя пользователя, но проблема та же самая, несмотря ни на что.

Я проверил ошибки в методе update_password модели, а такжеубедился, что это не личное.

1 Ответ

2 голосов
/ 15 октября 2010

Я также заметил это, только с помощью метода POST и только при использовании «member», так же, как ваш пример, то есть:

resources :forum_posts do
  member do
    post :preview
  end
end

вызовет это, но изменение его на GET или использование collection оба работают нормально, так что, похоже, это ошибка с маршрутами rails; Я обошел это сейчас, добавив следующее прямо над моими ресурсами: forum_posts do line:

match '/forum_posts/:id/preview(.:format)', :to => "forum_posts#preview", :as => :preview_forum_post

тогда все продолжает работать; Простое временное исправление.

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