2010-11-03 5 views
1

В приложении rails у меня есть специальный url (/ profile), который я сопоставляю с пользовательским контроллером, чтобы пользователь мог просматривать и редактировать свой профиль. Я сделал следующие записи в файле маршрута, чтобы «получить» для профиля перенаправил меня в действие профиля в пользовательском контроллере, а «post» для профиля будет перенаправляться на действие update_profile в пользовательском контроллере.Rails routing issue

match '/profile', :to => 'users#profile', :via => "get" 
match '/profile', :to => 'users#update_profile', :via => "post" 

Если я бегу рейк маршруты я вижу следующие две записи

profile GET /profile(.:format) {:controller=>"users", ":action=>"profile"} 
profile POST /profile(.:format) {:controller=>"users", ":action=>"update_profile"} 

Если я пытаюсь ударять Dev URL http://localhost:3000/profile он вызывающую страницу профиля, как и ожидалось. Если я нажимаю кнопку формы он дает мне следующую ошибку:

Routing Error 

No route matches "/profile" 

Глядя на сгенерированный HTML на начальной странице я вижу следующий тэг формы, так что кажется, действие правильно.

<form accept-charset="UTF-8" action="/profile" class="edit_user" enctype="multipart/form-data" id="edit_user_1" method="post"> 

Так что же мне не хватает? Посмотрев на вывод грабли, я предполагал, что это будет работать так, как есть. Я неправильно думаю о своих http-глаголах? Любая помощь будет оценена по достоинству.

ответ

0

Я вижу здесь несколько проблем.

Во-первых, это действия для определенного пользователя. Таким образом, маршрут, вероятно, должен быть 'profile/:id'

Во-вторых, показ и обновление автоматически генерируются при рендеринге ресурса. В чем преимущество переименования действий и их сопоставления с настраиваемыми URL-адресами? Нарушение автогенерированных маршрутов Rails RESTful часто вызывает проблемы. Это можно сделать, но у вас должна быть веская причина для этого.

В-третьих, ваши маршруты выглядят забавными для меня. Есть некоторые цитаты, где их не должно быть. Это то, как они появляются на консоли при запуске маршрутов рейка?

+1

Концепция/profile - это то, что подходит только для текущего пользователя, если вы не вошли в систему, вам не будет разрешен доступ к странице, поэтому в этом случае нет необходимости: id. Мы используем генерируемые URL-адреса для пользовательского контроллера для возможностей администратора, которые отличаются от пользователей, чем мы хотим, чтобы пользователь имел для своего профиля. Таким образом, действие редактирования используется администратором sys для редактирования существующего пользователя, где действие профиля предназначено для предоставления другого опыта, настроенного для текущего пользователя. Да, так оно и появляется в консоли. –

+1

Это имеет смысл. В этом случае единственное, что выглядит смешно для меня, это фактические маршруты. Там не должно быть цитаты раньше: действие, вы согласны? Единственное, что я могу придумать, - это последовательно использовать двойные кавычки. На ваших маршрутах у вас есть одинарные кавычки вокруг некоторых строк и двойные кавычки вокруг других. Это не должно иметь значения, но стоит попробовать. – Samo