在Rails中添加多个记录

时间:2015-07-07 13:23:12

标签: mysql ruby-on-rails ruby-on-rails-4 nested-forms

我是一个新手,在创建我的第一个rails应用程序时磕磕绊绊。我试图从嵌套表单向表中添加多条记录,目前只添加了最后一条记录。

我正在处理一个表单,该表单允许用户将数学方程式与在给定读取规则下应该如何读取数学方程式相关联。在抽象视图中,两个简单的记录是:

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

我有四个表:'等式','转录','阅读规则'和'测试'。单个测试由等式的id,转录和readRuleSet组成。

我有一个表单,其中有一个文本字段供用户选择等式的id,以及四个文本字段(与我的四个阅读规则集相关联),供他们选择转录的id。当我点击提交时,我想要四个新的测试'补充说,每个转录一个。目前,Rails只添加了最后一个。

我认为这是因为html源文本字段的id是相同的。我尝试将字段名称与each_with_index中的索引连接起来,但这使得我将一条记录添加到' test',而read_rule_set_id为null,因为我修改了列的名称指数。所以我已经把它拿出来了,看了很多,看了看有轨电视196,我仍然卡住了。

代码的相关部分:

\应用\模型\ 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

其他三个表分别有各自的“属于”字样。

\应用\视图\测试:

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

应用\控制器\ 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

1 个答案:

答案 0 :(得分:0)

检查test_params。

请参阅Rails指南nested-form

对于我的信息,嵌套的嵌套和嵌套的多态模型是可能的。

#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

但我认为传递json数据(由js JSON.stringify制作)更好,因为复杂性(?),直觉(?)以及最重要的是前端框架(例如angularjs(ng-model))< / p>

P.S。 (?)意味着它只适合我。