4 Stimmen

Übermittlung mehrerer Datensätze ohne Verschachtelung

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X