2015-07-07 14 views
6

Tôi là một người mới vấp ngã theo cách của mình thông qua việc tạo ứng dụng đường ray đầu tiên của tôi. Tôi đang cố gắng thêm nhiều bản ghi vào một bảng từ một biểu mẫu lồng nhau, và tại thời điểm này, chỉ có bản ghi cuối cùng đang được thêm vào.Thêm nhiều bản ghi trong Rails

Tôi đang làm việc trên một biểu mẫu cho phép người dùng kết hợp phương trình toán học với phương trình cần đọc theo quy tắc đọc đã cho. Trong chế độ xem tóm tắt, hai bản ghi đơn giản sẽ là:

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

Tôi có bốn bảng: 'phương trình', 'phiên âm', 'đọcRuleSets' và 'kiểm tra'. Một thử nghiệm đơn bao gồm các id của một phương trình, một phiên mã, và một readRuleSet.

Tôi có một biểu mẫu có trường văn bản để người dùng chọn id của phương trình và bốn trường văn bản (được kết hợp với bốn bộ quy tắc đọc của tôi) để chọn id của bản ghi âm. Khi tôi nhấn gửi, tôi muốn thêm bốn 'kiểm tra' mới, một cho mỗi phiên âm. Hiện tại, Rails chỉ đang thêm phần cuối cùng.

Tôi nghĩ đó là vì id của các trường văn bản giống nhau trong nguồn html. Tôi đã thử ghép tên trường với chỉ mục từ each_with_index, nhưng điều đó đã để lại cho tôi một bản ghi được thêm vào 'test' và read_rule_set_id là null vì tôi đã sửa đổi tên của cột bằng chỉ mục. Vì vậy, tôi đã thực hiện điều đó, đọc nhiều hơn, theo dõi các bản tin phát thanh 196, và tôi vẫn bị mắc kẹt.

bit có liên quan của mã:

\ ứng dụng \ mô hình \ 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 

Ba bảng khác có tương ứng 'của belongs_to của họ.

\ ứng dụng \ xem \ xét nghiệm:

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

ứng dụng \ controllers \ 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 

Trả lời

0

Kiểm tra test_params của bạn.

Xem Rails dẫn nested-form

Đối với thông tin của tôi, nó có thể cho các lồng của mô hình đa hình lồng nhau và lồng nhau.

#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 

Nhưng tôi nghĩ rằng nó là tốt hơn để truyền dữ liệu json (do js JSON.stringify) vì sự phức tạp (?), Trực giác (?) Và trên hết, khuôn khổ front-end (ví dụ angularjs (ng- model))

ps (?) có nghĩa là nó có thể chỉ dành cho tôi.

Các vấn đề liên quan