2015-07-07 20 views
6

Sono un novellino che mi inciampa creando la mia prima applicazione per rotaie. Sto cercando di aggiungere più record a una tabella da un modulo annidato e al momento viene aggiunto solo l'ultimo record.Aggiunta di più record in Rails

Sto lavorando su un modulo che consentirà a un utente di associare un'equazione matematica con come dovrebbe essere letto sotto una determinata regola di lettura. In una visione astratta, due record semplici sarebbero:

equation: "x-3", readingRule:"Simple", transcription"x take away three" 
equation: "x-3", readingRule:"Standard", transcription"x minus three" 

Ho quattro tabelle: 'Equazioni', 'trascrizioni', 'readingRuleSets', e 'test'. Un singolo test consiste degli id ​​di un'equazione, una trascrizione e un readRuleSet.

Ho un modulo, che ha un campo di testo per l'utente per selezionare l'id dell'equazione, e quattro campi di testo (associati ai miei quattro set di regole di lettura) per loro per selezionare l'id delle trascrizioni. Quando premo invio, voglio aggiungere quattro nuovi "test", uno per ciascuna delle trascrizioni. Al momento, Rails aggiunge solo l'ultimo.

Ho pensato che fosse perché l'id dei campi di testo sono gli stessi nella sorgente html. Ho provato a concatenare il nome del campo con l'indice da each_with_index, ma questo mi ha lasciato con un record aggiunto a 'test', e il reading_rule_set_id era nullo perché avevo modificato il nome della colonna con l'indice. Così l'ho tolto, letto molto di più, guardato i railscast 196 e sono ancora bloccato.

bit rilevanti di codice:

\ app \ modelli \ test.rb

class Test < ActiveRecord::Base 
    has_many :equations 
    has_many :reading_rule_sets 
    has_many :transcriptions 
    accepts_nested_attributes_for :equations :transcriptions :reading_rule_sets 
end 

Le altre tre tavoli hanno i loro rispettivi 'belongs_to di.

\ app \ Visto \ test:

<div> 
    <fieldset> 
     <legend> Reading Rules and Transcriptions </legend> 
      <% ReadingRuleSet.all.each_with_index do |rrs, index| %> 
       <div class="row"> 
        <div class="col-md-6"> 
         <label><%= rrs.name %></label> 
        </div> 
        <div class="col-md-6"> 
         <%= f.text_field :transcription_id %> 
         <%= f.hidden_field :reading_rule_set_id, :value =>rrs.id %> 
         <!--# .to_s + index.to_s--> 
        </div> 
       </div> 
      <% end %> 
    </fieldset> 
</div> 

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

app \ controllori \ tests_controller.rb

# POST /tests 
# POST /tests.json 
def create 
@test = Test.new(test_params) 

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

# PATCH/PUT /tests/1 
# PATCH/PUT /tests/1.json 
def update 
respond_to do |format| 
    if @test.update(test_params) 
    format.html { redirect_to @test, notice: 'Test was successfully updated.' } 
    format.json { render :show, status: :ok, location: @test } 
    else 
    format.html { render :edit } 
    format.json { render json: @test.errors, status: :unprocessable_entity } 
    end 
end 
end 

private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_test 
     @test = Test.find(params[:id]) 
    end 

# Never trust parameters from the scary internet, only allow the white list through. 
def test_params 
    params.require(:test).permit(:equation_id, :reading_rule_set_id, :transcription_id, :transcription_transcription) 
end 

risposta

0

Controllare le test_params.

guida Vedi Rails nested-form

Per le mie informazioni, è possibile per il annidati del modello di polimorfico nidificato e nidificato.

#example 
def class_info_params 
    params.require(:class_info).permit(..... 
    classes_attributes : [:id, :_destroy, , class_times_attributes:[:id, :day, :start_time, :_destroy]], 
    my_subcategories_attributes: [:id,:_destroy, :subcategoriable_id, :subcategoriable_type, :subcategory_id]) 
end 

Ma credo sia meglio passare dati JSON (prodotto da js JSON.stringify) per complessità (?), L'intuizione (?) E soprattutto, quadro front-end (es angularjs (ng- modello))

ps (?) significa che potrebbe essere solo per me.

Problemi correlati