Многоступенчатые рельсы MODEL

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

Ниже мой контроллер

def new 
  @event = Event.new(params[:event])
  @user = current_user
  respond_to do |format|
    if @event.save
      format.html { render :template => "events/new2" }
      format.json { render json: event_new2, status: :created, location: @event }
    else
      format.html { render action: "new" }
      format.json { render json: @event.errors, status: :unprocessable_entity }
    end
  end
end

def event_new2
  @event = Event.find(params[:id])
  respond_to do |format|
    if @event.update_attributes(params[:event])
      format.html { render :template => "events/new3" }
      # format.json { render json: event_new2, status: :created, location: @event }
    else
      format.html { render action: "event_new2" }
      format.json { render json: @event.errors, status: :unprocessable_entity }
    end
  end
end

 # POST /events
 # POST /events.json
def create
  @event = Event.new(params[:event])
  @user = current_user
  respond_to do |format|
    if @event.save
      format.html { redirect_to @event, notice: 'event erfolgreich erstellt.' }
      format.json { render json: @event, status: :created, location: @event }
    else
      format.html { render action: "new" }
      format.json { render json: @event.errors, status: :unprocessable_entity }
    end
  end
end

Моя модель требует только заголовок и описание. Мнения следующие:

Шаг 1

<%= simple_form_for (@event), :method => 'new' do |f| %>  
  <%= f.error_notification %>
  <%= f.input :title,:label => 'Event Titel' ,:placeholder=>"Titel des Events"%>
  <%= f.text_area :description,:label => 'Beschreibung',:placeholder=>"Beschreibung"%>
  <%= f.submit "Event erstellen", class: "btn btn-large btn-primary pull-right"%>

Шаг 2

<%= simple_form_for (@event), :method => 'new' do |f| %>  
  <%= f.error_notification %>
  <%= f.input :category%>
  <%= f.input :website, :label=>"Website"%>

Любая помощь? Заранее спасибо.

1 ответ

Обычный одношаговый метод создания модели - это когда кто-то new страница, которая будет называть new контроллер и визуализация new стр. Пользователь заполняет форму и нажимает кнопку Отправить, которая управляет create контроллер. Если это работает, он перенаправляет на show стр.

Если бы я сделал двухэтапное создание, я бы, вероятно, все равно пошел бы к new страницы и пусть она вызывает create действие, но вместо сохранения модели я бы step2 страницы и пусть они заполняют больше деталей, а также включают первую страницу подробностей в скрытых полях. Я хотел бы, чтобы эта форма вызывала действие, отличное от первого, когда я сохранял модель. Наоборот, я мог бы иметь первую форму вызова step2 Действие затем эту страницу вызвать create действие. Другой вариант - сохранить модель после шага 1 и извлечь ее на шаге 2. Эта опция была бы уродливой, если step1 успешен, но step2 терпит неудачу.

Ваш new Контроллер сохранит модель в базе данных (не получая никакого пользовательского ввода), а затем отобразит new2 стр. Я очень сомневаюсь, что это то, что вы хотите. Если это так, я очень рекомендую против этого.

Я полагаю, что Step1 - это то, что вы делаете для new2 и Шаг 2 - это то, что вы рендеринг для new3, Тем не менее, обе эти формы, как это будет называть update контроллер (не показан). Также метод new не стандарт, я немного удивлен, что не подавился этим. Стандартные методы :get, :post, :put, а также :delete, Возможно, вам удастся создать нестандартный вариант в конфигурации маршрутов, но я бы не рекомендовал это делать. Если вы хотите направить свою форму на ваш new2 контроллер, то вам нужно будет настроить маршрут и использовать :url возможность form_for чтобы получить это там.

Надеюсь, это поможет.

Другие вопросы по тегам