Rails

2015-07-07 25 views
6

birden fazla kayıt ekleme Benim ilk raylar uygulama oluşturma yolumda tökezleyen bir yeni biriyim. İç içe geçmiş bir formdan bir tabloya birden çok kayıt eklemeye çalışıyorum ve şu anda yalnızca son kayıt ekleniyor.Rails

Bir kullanıcının bir matematik denklemini belirli bir okuma kuralı altında nasıl okunması gerektiği ile ilişkilendirmesine izin verecek bir form üzerinde çalışıyorum. soyut bir görünümde, iki basit kayıtlar şöyle olacaktır: 'denklemler', 'transkripsiyonları', 'readingRuleSets' ve 'testleri':

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

Dört tablolar var. Tek bir test, bir denklemin, bir transkripsiyonun ve bir readRuleSet'in kimliklerinden oluşur.

Kullanıcının, denklemin kimliğini seçmesi için bir metin alanı olan bir formum var ve bunlar, transkriptlerin kimliğini seçmeleri için dört metin alanı (dört okuma kural kümemle ilişkili). Gönderdiğimde, her bir transkripsiyon için bir tane olmak üzere dört yeni 'test' eklemek istiyorum. Şu anda, Rails sadece son olanı ekliyor.

Bunun nedeni, metin alanlarının kimliğinin html kaynağında aynı olmasıydı. Alan adını her_with_index dizini ile birleştirmeyi denedim, ancak bu bana 'sınama' eklenecek bir kayıt bıraktı ve read_rule_set_id null değerindeydi çünkü indeksle sütunun adını değiştirdim. Bu yüzden bunu daha çok okudum, demiryollarını 196 izledim ve hala sıkışıp kaldım. kod

İlgili bitleri: app \ modelleri \

\ 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 

Diğer üç tablo kendi 'belongs_to' s var.

\ app \ görünümler \ testler:

<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> 

uygulama \ kontrolörleri \ 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 

cevap

0

sizin test_params kontrol edin. İç içe ve iç içe polimorfik modelin iç içe yönelik

benim bilgi için nested-form

Bkz Raylar rehberi, bu mümkün.

#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 

Ama, (js JSON.stringify tarafından yapılan) çünkü karmaşıklık (?) Sezgi (?) Ve her şeyden önce, ön uç çerçevesini (örneğin angularjs (Ng- json verileri aktarmak için daha iyi olduğunu düşünüyorum model))

ps (?) sadece benim için olabileceği anlamına gelir.