我有一个注册表单,用户可以在其中注册某种活动。
但是,我想给团队注册的可能性,我正在考虑一个类似于形式的向导。
一次创建5条记录。
问题是,我将在每一步创建一个新的注册,所以我认为wicked
gem不会为这种情况做这件事。
你能否就我该如何处理这个问题给我一些指导?
如果从表单发送new
attr,可能只是在创建后呈现i.e. team
?
也许使用自我加入?
这是我的头脑,但我知道必须有一个聪明的方法来做到这一点。
答案 0 :(得分: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
这是我的头脑,但一般的想法是你根据params中传递的人数运行event.enrolments.build来构建嵌套字段。
这使用fields_for和accepts_nested_attributes_for。这也使得通过传入partial:
中的表单上下文来重用现有表单非常方便<%= f.fields_for :enrolments do |af| %>
<%= render "enrolments/form", f: af %>
<% end %>