Ich baue eine Rails-App für eine Wettkampf-Bestenliste. Das Datenmodell istRails senden mehrere verschachtelte Formulare mit einer Senden-Schaltfläche
class Tournament
has_many :events
end
class User
has_many :entries
has_many :events, through: :entries
end
class Events
has_many :entries
belongs_to :tournament
end
class Entry
belongs_to :user
belongs_to :event
end
Jedes Turnier hat 2 Ereignisse und ein Benutzer kann bis zu 4 Einträgen pro Ereignis ein, so insgesamt 8 Einträge pro Turnier. Ich möchte dem Benutzer erlauben, alle 8 Einträge in einem Formular mit einer Übermittlungsschaltfläche einzugeben.
Meine Strecken
resources :entries, except: [:index, :show] do
collection do
match 'create_collection', via: [:create]
end
end
Ich habe auch eine create_collection Methode in der Einträge-Controller um die Einträge zu verarbeiten, obwohl ich noch nicht so weit bekommen haben. Ich bin mir nicht sicher, wie man das Formular richtig funktioniert.
_form.html.haml (die durch eine teilweise Ansichten/Turnieren/index.html.haml und übergibt die next_events Ereignisinstanzen für das Turnier.
.entry-form
= form_tag create_collection_entries_path do |form|
- next_events.each do |event|
= event.name
= fields_for "events[]", event do |f|
- 4.times do
= f.fields_for :entries do |f|
= f.label_tag 'player'
= f.text_field 'player'
= submit_tag "Submit", class: "btn btn-success"
Die Form zeigt, wie I die 2 wiedergegeben ist, erwarten, aber wenn ich die einreichen klicken nur die letzten vier Einträge in dem params vorgelegt und die Ereignis-ID nicht wird übergeben
"events"=>[{"entries_attributes"=>
{"0"=>{"player"=>"player5","id"=>"33"},
"1"=>{"player"=>"player6", "id"=>"34"},
"2"=>{"player"=>"player7", "id"=>"35"},
"3"=>{"player"=>"player8", "id"=>"36"}}}],
"commit"=>"Submit"}
Wie werde ich alle Eingabeparameter für beiden Veranstaltungen mit dem richtigen vorgelegt werden Ereignis-ID?