Ich bin sicher, dass ich über dieses Problem nachdenke, aber ich kann nicht herausfinden, wie ich einfach mehrere Datensätze auf einmal erstellen und übermitteln kann. Ich habe ein Benutzermodell und ein Vorhersagemodell. User hat_viele Vorhersagen, und eine Vorhersage gehört_zu einem User. Ich habe meine Routen wie folgt verschachtelt
:resources users do
:resources predictions
end
Wenn ich users/1/predictions/new aufrufe, muss ich 6 Vorhersagedatensätze erstellen und sie auf einmal an die Datenbank übermitteln.
In meinem Vorhersage-Controller:
before_filter :load_user
def new
3.times { @user.predictions.build }
end
def create
@prediction = @user.predictions.new(params[:prediction])
if @prediction.save
redirect_to @user, :notice => 'Prediction added'
else
redirect_to @user, :notice => 'Unable to add'
end
end
def destroy
@prediction = @user.prediction.find(params[:id])
@prediction.destroy
redirect_to @user, :notice => "Prediction deleted"
end
private
def load_user
@user = current_user
end
Und in meiner Vorhersage new.html.erb:
<%= form_for ([@user, @user.predictions.new]) do |f| %>
<div class="fields">
<%= f.label :position %>
<%= f.text_field :position %>
</div>
<div class="fields">
<%= f.label :athlete_id, 'Athlete'%>
<%= f.collection_select(:athlete_id, Athlete.all, :id, :name, :prompt => 'Select an athlete' )%>
</div>
<div class="fields">
<%= f.label :race_id, 'Race'%>
<%= f.collection_select(:race_id, Race.upcoming, :id, :name, :prompt => 'Select a race' )%>
</div>
<div class="actions"><%= f.submit %></div>
<% end %>
Ich dachte, ich müsste :accepts_nested_attributes_for verwenden, aber ich muss nicht gleichzeitig Benutzermodelle erstellen und aktualisieren. Bestehende Benutzer werden Vorhersagen erstellen 3 Datensätze zu einer Zeit für mehrere Rennen, da dies eine Fantasy-Sport-App ist.