2016-02-15 4 views
0

У меня есть форма регистрации, в которой пользователь может зарегистрироваться на какое-то событие.Rails wizard form

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

В основном создать 5 записей за раз.

Проблема в том, что на каждом шаге у меня будет новое создание регистрации, поэтому я подумал, что жемчужина wicked не сделает этого для этого сценария.

Можете ли вы дать мне несколько рекомендаций относительно того, как я должен подходить к этому?

Возможно, только рендер new после создания, если i.e. team attr отправляется из формы?

Может быть, использовать себя?

Это не в моей голове, но я знаю, что должен быть умный способ сделать это.

ответ

0

Я не знаю, как ваши модели структурированы, но если у вас есть что-то вроде:

class Attendee 
    has_many :enrolments 
    has_many :events, through: :enrolments 
end 

class Enrolment 
    has_many :attendees 
    belongs_to :event 
end 

class Event 
    has_many :enrolments 
    has_many :attendees, through: :enrolments 
    accepts_nested_attributes_for :enrolments 
end 

Затем вы можете сделать что-то вроде:

# controllers/enrolments_controller.rb 
class EnrolmentController < ApplicationController 
    def new 
    @event = Event.find(params[:event_id]) 
    pax = params[:persons].to_i 
    pax.times do 
     @event.enrolments.build 
    end 
    end 

    def create 
    @event = Event.find(params[:event_id]) 
    @event.enrolments.build(enrolment_params) 
    @event.save 
    end 

protected 
    def enrolment_params 
    # require specific parameters here 
    params.require(:event).permit(:attendee_attributes => []) 
    end 
end 

# views/enrolments/new.html.erb 
<%= form_for @event, url: event_enrolments_path(@event) do |f| %> 
    <%= f.hidden_field :event_id %> 
    <%= f.fields_for :enrolments do |af| %> 
    <%= af.select :attendee_id, Attendee.all.collect {|p| [ p.name, p.id ] } %> 
    <% end %> 
    <%= f.submit %> 
<% end %> 

# routes.rb 
resources :events do 
    resources :enrolments 
end 

Это у верхней части моей головы , но общая идея заключается в том, что вы создаете вложенные поля, запустив event.enrolments.build на основе количества людей, прошедших в параметрах.

Используется fields_for и принимает__и_на__приборы_for. Это также делает его действительно удобным для повторного использования существующих форм путем передачи в контексте формы в частичном:

<%= f.fields_for :enrolments do |af| %> 
    <%= render "enrolments/form", f: af %> 
<% end %> 
+0

Эй, человек, спасибо за идею. Прямо сейчас, у меня просто есть форма регистрации, в которой хранятся данные atendee и event_id (издание). В основном только 2 модели, связанные здесь, событие и модель регистрации. –

Смежные вопросы