Я конвертировал приложение 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 модели, а такжеубедился, что это не личное.