Rails 3 Routes: Именованные маршруты. Маршрут не совпадает

Итак, я получаю сообщение об ошибке «Нет совпадений маршрутов», и, будучи новичком в Rails 3 (и в Rails в целом), я действительно не знаю, в чем проблема. Вот соответствующие маршруты:

resources :users
#...
match 'reset_password(/:reset_password_code)' => 'users#reset_password', :as => :reset_password, :via => :get
match 'reset_password' => 'users#reset_password_submit', :as => :reset_password, :via => :post

Метод GET работает нормально. Я получаю сообщение об ошибке маршрутизации, когда форма POST сгенерирована на странице получения, которая начинается вот так.

<%= form_for @user, :url => reset_password_url do |f| %>

похоже, что он публикуется в правильном месте, так как URL-адрес генерируется с использованием «reset_password_url», он публикуется на нем, и URL-адрес выглядит так, как должен... у кого-нибудь есть идеи?

ОБНОВЛЕНИЕ

  • Я использую рельсы 3.0.4
  • Я пробовал убрать все остальные маршруты, кроме тех, которые я упомянул здесь, и я до сих пор не могу понять, почему он не работает.

person Groovetrain    schedule 05.03.2011    source источник
comment
привет, я только что проверил ваш код, и он отлично работает... вы проверили, что метод в форме действительно публикуется? Вы пытались перезапустить свой сервер, чтобы загрузить новые маршруты? И помните, что в URL-адресе действия формы не должно быть кода сброса.   -  person sled    schedule 05.03.2011
comment
Начальный тег созданной формы: ‹form accept-charset=UTF-8 action=localhost:3000/reset_password class=edit_user id=edit_user_1 method=post›   -  person Groovetrain    schedule 05.03.2011
comment
Если это работает нормально для вас, значит, в моих маршрутах должно быть что-то еще. По крайней мере, это работает для кого-то :)   -  person Groovetrain    schedule 05.03.2011


Ответы (1)


Догадаться!

В моей форме рельсы (правильно) предполагали, что, поскольку у меня есть пользователь, которого я использовал с помощником form_for, я хотел обновить пользователя, а не создавать нового.

Поэтому он использовал метод PUT для публикации моей формы. Чтобы решить проблему маршрутизации, мне просто нужно было изменить последний маршрут на:

match 'reset_password' => 'users#reset_password_submit', :as => :reset_password, :via => :put

Я обнаружил проблему только после того, как использовал Web Inspector в webkit, чтобы просмотреть весь запрос, и посмотрел на отправляемый параметр _method.

person Groovetrain    schedule 06.03.2011
comment
Со мной случилось то же самое. Вместо того, чтобы изменить глагол с «пост» на «положить», я изменил form_for с «form_for @user» на «form_for: user» - person sha1dy; 30.03.2011