首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rails5表单:遍历集合以获取问题列表,但更新不同的模型

在Rails5中,可以使用表单来遍历集合以获取问题列表,并且可以更新不同的模型。这在一些需要处理多个相关模型的场景中非常有用。

首先,我们需要定义一个包含问题和答案的模型。假设我们有一个问题模型(Question)和一个答案模型(Answer),它们之间是一对多的关系,一个问题可以有多个答案。

代码语言:txt
复制
# 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

接下来,我们需要在问题控制器中创建一个新的问题实例,并为其关联的答案模型构建表单。

代码语言:txt
复制
# 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个答案表单字段。你可以根据实际需求来调整这个数字。

接下来,我们需要在问题的视图中使用表单帮助器方法来遍历问题和答案集合,并生成相应的表单字段。

代码语言:txt
复制
<!-- 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代表每个答案对象,你可以在其中使用表单帮助器方法来生成对应的字段。

最后,我们需要在问题控制器中更新问题的操作中允许答案的更新。

代码语言:txt
复制
# 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方法来允许答案的更新。

这样,当我们提交表单时,问题和答案的数据将被正确地保存和更新。

这个功能可以在各种场景中使用,例如创建问卷调查、创建带有多个选项的投票等。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供弹性计算能力,满足不同规模应用的需求。产品介绍链接
  • 云数据库 MySQL 版(CDB):提供高性能、可扩展的 MySQL 数据库服务。产品介绍链接
  • 云原生容器服务(TKE):基于 Kubernetes 的容器管理服务,简化容器化应用的部署和管理。产品介绍链接
  • 云安全中心(SSC):提供全面的云安全解决方案,保护云上资源的安全。产品介绍链接

以上是一个完善且全面的答案,涵盖了Rails5表单遍历集合以获取问题列表并更新不同模型的相关知识和推荐的腾讯云产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

鹅厂分布式大气监测系统:以 Serverless 为核心的云端能力如何打造?

导语 | 为了跟踪小区级的微环境质量,腾讯内部发起了一个实验性项目:细粒度的分布式大气监测,希望基于腾讯完善的产品与技术能力,与志愿者们共建一套用于监测生活环境大气的系统。前序篇章已为大家介绍该系统总体架构和监测终端的打造,本期将就云端能力的各模块实现做展开,希望与大家一同交流。文章作者:高树磊,腾讯云高级生态产品经理。 一、前言 本系列的前序文章[1],已经对硬件层进行了详细的说明,讲解了设备性能、开发、灌装等环节的过程。本文将对数据上云后的相关流程,进行说明。 由于项目平台持续建设中,当前已开源信息

014
领券