Самым большим недостатком является то, что отображение сообщений об ошибках и недопустимых полей теперь полностью лежит на вашем клиентском JavaScript. Это становится намного меньшей проблемой и может даже оказаться полезным, если вы используете что-то вроде Backbone или KnockoutJS на стороне клиента.

ичок в рельсах и не уверен, что согласен с тем, как я справляюсь с некоторыми уроками, которые я прошел. Проблема связана с тем, как обрабатывать неверные представления формы. Стандартный способ сделать что-то вроде:

class ThingsController < ApplicationController


  # POST /things
  def create

    @thing = Thing.new(params[:thing])

    if @thing.save
      flash[:notice] = 'Thing created'
      redirect_to(@thing)
    else
      render :action => :new
    end

  end

Когда происходит сбой @ thing.save, пользователю предоставляется та же самая форма, предварительно заполненная только что введенными значениями, а также вспышка того, что пошло не так. Пока все хорошо, за исключением того, что теперь URL-адрес изменился с / things / new на things /, что вместо этого можно было бы ожидать, что вместо этого будет отображаться представление индекса.

Кроме того, если пользователь обновляет страницу, он теперь просматривает индексное представление. Если он щелкает назад, ему предлагается повторно отправить форму, которую я всегда старался избегать. Если я redirect_to (new_thing_path), предыдущее представление пользователя теряется, как и сообщения об ошибках.

Я понимаю, что RESTful, этот метод может быть «правильным», так как создание объекта вещи должно быть результатом POSTing к / вещам, но с точки зрения пользовательского интерфейса, меня это не особо волнует.

Я мог бы «вручную» сохранить недопустимый объект @thing в сеансе пользователя, чтобы он отображался после того, как я перенаправил его обратно на new_thing_path, но это похоже на хак. Кажется, должен быть "рельсовый способ" сделать это.

Идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос