Является ли "Rails Way" для `update` принципиально ошибочным? - PullRequest
4 голосов
/ 14 февраля 2012

Я намеренно задаю этот вопрос подстрекательским образом, потому что беспокоюсь, что что-то упустил.

Rails Way для обновления модели выглядит следующим образом:

class UsersController < ApplicationController
  ...
  def update
    @current_user = load_user
    if @current_user.update_attributes params[:user]
      redirect_to success_path
    else
      render :edit
    end
  end
end

Это все хорошо, за исключением того, что вы попадаете на нечетный URL, когда отправка формы неверна:

Редактирование пользователя

Вы попадаете на путь:

users/:user_id/edit

После отправки изменений, которые не подтверждаются

т.е. вам нужно исправить входные данные в вашей форме и повторно отправить:

users/:user_id

После отправки изменений, которые действительно подтверждают

success_path

Какого черта вы находитесь на другом URL только потому, что в форме есть ошибки?


Проблема ...

Вы делаете то же самое, но теперь у вас другой URL. Это немного странно.

На самом деле, честно говоря, это не так. Вы находитесь в форме, которая не была правильно проверена и поэтому перезагружена. Вы все еще должны быть на /users/:user_id/edit. Если бы вы сделали проверку JS, вы бы.

Более того, если у вас есть какая-то «выбранная» логика, действующая в вашей навигации, то вы фактически визуально не в том месте, так как правильный элемент навигации больше не подсвечивается - похоже, вы находитесь в профиле пользователя. стр.

Ответы [ 2 ]

6 голосов
/ 14 февраля 2012

Какого черта вы находитесь на другом URL только потому, что в форме есть ошибки?

Потому что, когда вы впервые зашли на:

users/:user_id/edit

...вы запрашивали GET.

Затем вы отправили:

users/:user_id

Итак, отправив сообщение формы, вы запросили другой маршрут ресурса и по определению имеете другой URL.

Фреймворку не важно, что происходило в фоновом режиме во время обработки вашего запроса - все, что он знает, это то, что это был POST (который по соглашению не обязательно является идемпотентным, как GET)

0 голосов
/ 14 февраля 2012

На самом деле это не «Путь Рельсов», а «Путь ОТДЫХА».Википедия: Передача представительского состояния

Если вы следуете правилам, вы получаете REST-совместимый веб-сервис бесплатно.Как я понимаю, путь "ресурс / id / edit" является специфическим для HTML-документов.Клиентам веб-сервисов не нужна форма для редактирования.

Поэтому ребята старались быть последовательными.Если вам не нужна совместимость с веб-сервисами, вы можете изменить маршруты.

...