我有一个调查应用程序,允许人们创建问题。当用户创建新问题时,他们还可以提供答案选项。对于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" %>
答案 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