Многоступенчатые рельсы 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
чтобы получить это там.
Надеюсь, это поможет.