在Rails5中,可以使用表单来遍历集合以获取问题列表,并且可以更新不同的模型。这在一些需要处理多个相关模型的场景中非常有用。
首先,我们需要定义一个包含问题和答案的模型。假设我们有一个问题模型(Question)和一个答案模型(Answer),它们之间是一对多的关系,一个问题可以有多个答案。
# app/models/question.rb
class Question < ApplicationRecord
has_many :answers, dependent: :destroy
accepts_nested_attributes_for :answers, reject_if: :all_blank, allow_destroy: true
end
# app/models/answer.rb
class Answer < ApplicationRecord
belongs_to :question
end
接下来,我们需要在问题控制器中创建一个新的问题实例,并为其关联的答案模型构建表单。
# app/controllers/questions_controller.rb
class QuestionsController < ApplicationController
def new
@question = Question.new
3.times { @question.answers.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, answers_attributes: [:id, :content, :_destroy])
end
end
在上面的代码中,我们使用3.times { @question.answers.build }
来创建3个答案表单字段。你可以根据实际需求来调整这个数字。
接下来,我们需要在问题的视图中使用表单帮助器方法来遍历问题和答案集合,并生成相应的表单字段。
<!-- app/views/questions/new.html.erb -->
<%= form_with(model: @question, local: true) do |form| %>
<%= form.label :title %>
<%= form.text_field :title %>
<%= form.fields_for :answers do |answer_fields| %>
<%= answer_fields.label :content %>
<%= answer_fields.text_field :content %>
<%= answer_fields.check_box :_destroy %>
<%= answer_fields.label :_destroy, 'Remove' %>
<% end %>
<%= form.submit %>
<% end %>
在上面的代码中,我们使用form.fields_for :answers
来遍历答案集合,并生成相应的表单字段。answer_fields
代表每个答案对象,你可以在其中使用表单帮助器方法来生成对应的字段。
最后,我们需要在问题控制器中更新问题的操作中允许答案的更新。
# app/controllers/questions_controller.rb
class QuestionsController < ApplicationController
# ...
def update
@question = Question.find(params[:id])
if @question.update(question_params)
redirect_to @question
else
render :edit
end
end
# ...
end
在上面的代码中,我们使用question_params
方法来允许答案的更新。
这样,当我们提交表单时,问题和答案的数据将被正确地保存和更新。
这个功能可以在各种场景中使用,例如创建问卷调查、创建带有多个选项的投票等。
推荐的腾讯云相关产品和产品介绍链接地址:
以上是一个完善且全面的答案,涵盖了Rails5表单遍历集合以获取问题列表并更新不同模型的相关知识和推荐的腾讯云产品。
领取专属 10元无门槛券
手把手带您无忧上云