Как сохранить (или обновить) объект без формы - PullRequest
0 голосов
/ 25 октября 2011

Я реализовал стандартный процесс Rails (и RESTful) для CRUD-объекта.

Единственная настройка (или «конфигурация поверх соглашения») мне нужна следующая:

После стандартного edit form, вместо показывая объекта, я показываю его " preview " (которое просто является действием "show" с некоторыми настройками в представлении и с"object.status = preview") на данный момент мне нужно разрешить пользователю "подтверждать" или "сохранять" этот предварительно просмотренный объект с помощью простой кнопки. Как если бы пользователь снова отправлял форму редактирования (или тот же объект), но не видел ее снова .Просто нажмите кнопку «Подтвердить».

(В действии обновления я проверяю, является ли object.status «предварительным просмотром», и если да, то считаю его подтвержденным и показываю подтверждающее сообщение вместо предварительного просмотра).

Моя единственная недостающая часть - это кнопка «Подтвердить» в представлении «показать» до PUT объект @.

Как я могу это реализовать?

PS: я знаю, что лучше всего показывать предварительный просмотр в режиме редактирования (как в stackoverflow.com), но в моем приложении дизайн очень важен, поэтому мне нужнообеспечить максимально приближенный к реальности максимально возможный предварительный просмотр.

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

Возможно, вам не нужно другое действие, просто другое представление. В основном поток выглядит примерно так:

  1. Пользователь попадает на страницу редактирования. Форма предоставлена. Они редактируют это и представляют это…
  2. Вызывается действие Обновить. Параметр «Предварительный просмотр» недоступен, поэтому представление «Предварительный просмотр» отображается вместо фактического сохранения формы.
  3. Предварительный просмотр показывает предварительный просмотр (например, шоу), но он также содержит копию формы со скрытыми полями (с помощью CSS) и дополнительное скрытое значение, называемое «предварительный просмотр», со значением «1».
  4. Когда пользователь нажимает «Подтвердить», форма отправляется обратно к действию обновления, которое затем видит параметр «Предварительный просмотр» и фактически сохраняет объект и перенаправляет на страницу показа.

Вот код контроллера, так как это самая сложная часть:

# controller
def show
  @widget = Widget.new
end

def edit
  @widget = Widget.find(params[:id])
end

def update
  previewed = params.delete(:previewed)

  @widget = Widget.find(params[:id])
  @widget.attributes = params

  if @widget.valid? && previewed
    @widget.save!
    redirect_to widget_path(@widget), :notice => 'Yay'
  elsif @widget.valid?
    render :preview
  else
    render :edit
  end
end
1 голос
/ 25 октября 2011

Я думаю, вам нужно изменить действие по созданию, чтобы отобразить Presenter, который вы можете создать для отображения ваших данных.Просто используйте стандартный класс Ruby и настройте его для представления данных, которые вы хотите подтвердить, и добавьте собственный маршрут, чтобы разрешить предварительный просмотр / подтверждение URL для PUT ресурса.Вы можете столкнуться с проблемами, если у вас есть стандартное соглашение resources :object.Я думаю, что вы захотите настроить показ, редактировать, удалять маршруты самостоятельно, чтобы позволить вам контролировать новый / создать маршрут.

Если вы никогда не использовали докладчика или не знакомы сЕсть несколько хороших ресурсов в Интернете.Не стесняйтесь читать сообщения Стива Клабника на тему здесь и здесь .

...