我有一个应用程序,用户可以请求参与活动。当管理员创建事件时,他们会添加可用于申请的空格(如“表格”,“机架”等及其价格)。
当用户初始化请求向导时,会自动创建一个Request,并自动为该请求创建一个RequestSpace,每个Event.spaces一个,默认值为0.用户可以请求它们的数量通过增加表单中的数字来获取每种空间类型。
它有点像购物车,用户在数字字段中更改产品的数量,但此处的产品(空格)是由事件预定义的。
这意味着Request表单为每个关联的RequestSpace获取一个数字字段。我在视图中有这种表单渲染,它看起来像我想要的方式。问题是我不知道如何在请求控制器中保存更新操作中的每一行。
模型中的相关代码:
class Event < ApplicationRecord
has_many :requests, dependent: :destroy
has_many :spaces, dependent: :destroy
...
class Space < ApplicationRecord
belongs_to :event
has_many :request_spaces
...
class Request < ApplicationRecord
belongs_to :event
has_many :request_spaces
accepts_nested_attributes_for :request_spaces
...
class RequestSpace < ApplicationRecord
belongs_to :request
belongs_to :space
...
表格:
<%= form_for(@request, local: true) do |form| %>
...
<% @request.request_spaces.each do |rs| %>
<%= form.fields_for :request_spaces, rs do |s| %>
<%= s.number_field :amount, min: "0", max: "#{rs.space.max_amount}" %>
<% end %>
<% end %>
...
<% end %>
requests_controller.rb中的强参数:
params.require(:request).permit(<other params omitted>, reqeust_spaces_attributes:[:id, :amount])
当我在表单中保存更改时,RequestSpaces:amount字段不会更新。有关如何在控制器中解决这个问题的想法吗?
编辑:
此SO问题/答案描述了类似的问题,并启发了表单字段的循环解决方案:Rails loop through data in a form field