2011-02-09 4 views
1

После решения другого problem with routes, теперь у меня есть еще один.Рельсы 3 проблемы маршрута

У меня есть этот маршрут в моем routes.rb:

 

match "user/create_new_password/:reset_password_key" =>"users#create_new_password", :via=>[:post, :get], :as=>:create_new_password 
 

я могу проверить это в моих функциональных тестах, как это:

 

test "should create new password " do 
    post :create_new_password, {:user=>{:password=>"123456", :password_confirmation=>"123456"}, :reset_password_key=>user.reset_password_key} 
end 
 

На мой взгляд, у меня есть следующий вид:

 

=simple_form_for @user, :url=>create_new_password_path do |f| 
    =f.input :password, :label=>I18n.t("activerecord.attributes.user.email") 
    =f.input :password_confirmation, :label=>I18n.t("activerecord.attributes.user.password_confirmation") 
    =f.submit I18n.t "activerecord.actions.user.create_new_password" 

 

Когда я отправить форму, я получаю:

 

No route matches "/user/create_new_password/OqQxYTgjYKxXgvbAsTsWtMnIpMOpsjCRzLGZmJZLSbYtjvcvdpO" 
 

Большая строка, это reset_password_key.

Я проверил его в функциональных тестах с тем же значением для reset_password_key.

Соответствующий выход для граблей маршрутов:

 

create_new_password POST|GET /user/create_new_password/:reset_password_key(.:format) {:controller=>"users", :action=>"create_new_password"} 
 

я что-то не хватает ...

+0

должны спросить: вы запустили сервер с момента редактирования маршрутов? Если да, можете ли вы разместить содержимое вашего файла 'config/routes.rb'? Спасибо и удачи! –

+0

Да, много раз. Однако я нашел проблему. Я изучаю это с трудом. Я недооценил умность Rails ... Так как я редактирую существующую сущность, в этом случае @user, rails задает метод _ put: put .... так что у меня не было никакого маршрута ... –

ответ

1

Как ответил на комментарий BinaryMuse, я нашел то, что пошло не так ... Я проверил запрос в firebug и обнаружил, что _method = put отправляется с POST. Умение Rails обнаружило, что я редактирую и существующий экземпляр User (@user), поэтому он по умолчанию устанавливает POTS в PUT, используя параметр _method.

Проблема в том, что на моих маршрутах у меня нет метода PUT в массиве: via. Просто изменено на:

 

match "user/create_new_password/:reset_password_key" =>"users#create_new_password",:via=>[:get, :put], :as=>:create_new_password 
 

И в контроллере:

 

def create_new_password 
    if request.put? 
     #change password 
    else 
    #render template 
    end 

end 
 
Смежные вопросы