2012-03-30 7 views
1

Ich habe 2 Modelle Event and Tasks.Ruby on Rails Update-Modell mit mehr als einer Zeile in einem einzigen Formular

Ereignis hat viele Aufgaben. und Aufgabe ist eine verschachtelte Ressource unter Ereignis , also erstelle ich zuerst ein Ereignis und frage einen Benutzer, wie viele Aufgaben er darin erstellen will.

Sagen wir, ich erstelle ein Ereignis und ein Benutzer möchte 3 Aufgaben darin erstellen. Ich will es in 2 Schritten zu tun, und nicht ein

Nach der erfolgreichen Erstellung von Ereignis, jetzt gehe ich zu/events/1/Aufgaben/new

hier I 3 Aufgabe Namensfelder haben wollen und wenn der Benutzer legt sie sollte 1

gegen das Ereignis in Task-Tabelle erstellt es 3 Zeilen sein Wie diese _form.html.erb

<%= form_for [@event, @task] do |f| %> 
    <% if @task.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@task.errors.count, "error") %> prohibited this task from being saved:</h2> 

     <ul> 
     <% @task.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :content %><br /> 
    <%= f.text_field :content %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

hier ist also die Aufgabe

ich erreichen Task-Controller

def new 
    @event=Event.find(params[:event_id]) 
    @event.task_count do 
     @choice = @event.tasks.build 
    end 
    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @task } 
    end 
    end 


    # POST /tasks 
    # POST /tasks.json 
    def create 
    @task = Task.new(params[:task]) 

    respond_to do |format| 
     if @task.save 
     format.html { redirect_to @task, notice: 'Task was successfully created.' } 
     format.json { render json: @task, status: :created, location: @task } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Antwort

0

Ich denke, Sie machen dies komplizierter, indem Sie die Aufgaben Controller einbeziehen. Controller leiten Aktionen in der Webanwendung. Aber nach Ihrer Beschreibung scheinen Sie 3 Aufgaben automatisch erstellen zu lassen, wenn das Ereignis erstellt wird (wenn ich Sie richtig verstehe). Anders als bei der Eingabe der ursprünglichen Namen involviert dies den Benutzer nicht wirklich.

Lassen Sie sie die Namen übermitteln, und wenn der Ereigniscontroller das Ereignis erstellt, sollte er dort die Aufgaben erstellen.

Wenn Ihre verschachtelte Ressource komplizierter ist, handelt es sich um eine Aufgabe für verschachtelte Formulare. Sie könnten von diesem Screencasts profitieren:

http://railscasts.com/episodes/196-nested-model-form-part-1

0

Erste intilized Sie 3 Aufgabe Aginst ein eveent auf diese Weise

def new 
    @event=Event.find(params[:event_id]) 
    3.times{@event.tasks.build} 

    respond_to do |format| 
    format.html # new.html.erb 
    format.json { render json: @task } 
    end 
    end 

Dann wird es sicherlich schaffen 3 Aufgabe gegen 1 sein event.or Sie können helfen von Ryan Schienen gegossen für verschachtelte Formen auch