Одноступенчатые многошаговые формы с направляющими 3 - PullRequest
1 голос
/ 18 января 2011

Я пытаюсь создать многошаговую форму с сохранением ActiveRecord.

Итак, сначала пользователь отправляет форму и создается «пользователь».

Позже администратор просмотрит этого «пользователя» и может 1) отклонить этого пользователя или 2) запросить дополнительную информацию.

Затем создается другая форма для пользователя, чтобы предоставить новую информацию.

и т. Д.

Это очень похоже на конечный автомат, но ни один из доступных камней не имеет четкой документации. Кроме того, я полагаю, что полагаюсь на пользовательские действия для контроллера.

Не знаете, если мой дизайн плохой или есть какой-то правильный способ сделать это?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 18 января 2011

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

  • status = 0 - новый пользователь
  • status = 1 - администратор отклонил этого пользователя
  • status = 2 - администратор запрашивает дополнительную информацию

Затем необходимо создать правильные формы для пользователя на основе поля состояния.Вы можете сделать это в контроллере:

def multistep_form
  @user = User.find(params[:id])
  case @user.status
  when 0
    render "form_1"
  when 1
    render "rejected"
  when 2
    render "form_2"
  else
    render "error"
  end
end

Или где-то в представлении:

<%= render :partial => "form_{@user.status}" %>

тогда, конечно, вам нужно иметь частичные значения: _form_1, _form_2 и_form_3.

Это единственный пример, в реальном решении вам также нужно защитить поле status от изменения пользователем и добавить некоторые проверки в поле status, чтобы оно не было чем-то, кроме0, 1 и 2.

2 голосов
/ 18 января 2011

Я не знаю, если это именно то, что вы ищете, но, надеюсь, это поможет вам в правильном направлении.

Райан Бейтс сделал Railscast по этому вопросу в июне - http://railscasts.com/episodes/217-multistep-forms

1 голос
/ 19 июня 2011

Если вы начнете выполнять логику, когда пользователь продвигается по шагам, возможно, будет удобнее рассмотреть конечный автомат.

Я очень доволен http://dev.netizer.pl/transitions-state-machine-for-rails-3.html

может просто делать такие вещи, как user.approve!

и подключать действия, которые означают отдельно в конечный автомат, такие как отправка электронных писем.Как только вы получаете более одного или двух действий за переход, или вам нужно добавить новый переход, начинает иметь смысл моделировать как конечный автомат, ИМХО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...