Rails 4:在单个表单中保存同一模型的多个实例

时间:2014-12-14 22:13:01

标签: arrays forms ruby-on-rails-4 rails-models hash

我有一个调查应用程序,允许人们创建问题。当用户创建新问题时,他们还可以提供答案选项。对于Ex。问题:天空是什么颜色的?答案选项:蓝色,红色,紫色。

现在,我的单一表单允许创建问题模型和选项模型,但我想从同一表单创建多个选项。

我是否应该创建一个允许用户提交哈希数组的无界form_tag,并迭代该数组以创建每个选项模型记录?或者还有另一种方法吗?

option.rb

class Option < ActiveRecord::Base
  belongs_to :question
end

question.rb

class Question < ActiveRecord::Base
  has_many :options
  accepts_nested_attributes_for :options              
end

问题控制器

class QuestionsController < ApplicationController
  def new
    @question = Question.new
    @question.options.build
  end

  def create
    @question = Question.new(question_params)
    if @question.save
      redirect_to @question
    else
      render 'new'
    end
 end

 private
    def question_params
      params.require(:question).permit(:title, :desc, options_attributes:[:id, :scope, :option, :question_id])
    end
end

_form.html.erb

<%= form_for @question do |f| %>
    <%= f.text_field :question, class: "form-control", placeholder: "Survey Question?" %>
    <%= f.fields_for :options do |u| %>
        <%= u.text_field :option, class: "form-control", placeholder: "Answer Option 1", id: "answer"%>
        <%= u.text_field :option, class: "form-control", placeholder: "Answer Option 2", id: "answer"%>
        <%= u.text_field :option, class: "form-control", placeholder: "Answer Option 3", id: "answer"%>
    <% end %>   
<%= f.submit 'Submit', class: "btn btn-default" %>

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试创建3个选项作为答案,您只需将new操作更新为:

def new
  @question = Question.new
  3.times { @question.options.build }
end

这样,新视图将呈现3个选项,但您必须略微提供 像这样更改 _form.html.erb 文件:

<%= form_for @question do |f| %>
  <%= f.text_field :question, class: "form-control", placeholder: "Survey Question?" %>
  <%= f.fields_for :options do |u| %>
    <%= u.text_field :option, class: "form-control", placeholder: "Answer Option" %>
  <% end %>   
  <%= f.submit 'Submit', class: "btn btn-default" %>
<% end %>

我假设您不需要ids字段,因为它们在每个输入上重复,但我认为这与复制/粘贴误解有关......

此外,如果您需要动态,请查看@Richlewis建议的nested_form

祝你好运!

相关问题