如何在一个视图中为一个模型设置多个表单

How to have multiple forms for one model in one view

我需要通过将所有分配以一种形式关联到游戏来设置游戏分配。当我转到 edit_assignment 页面时,虽然只有 1 个输入。例如,如果我在一场比赛中有 3 个任务。我如何构造表单以显示 3 个输入,也就是 3 个分配?可能还值得注意的是,我希望渲染与为每个游戏创建的分配一样多的输入。

我尝试了类似的方法但无济于事:

<%= @game.assignment do |a| %>
  <div>
    <%= simple_form_for(a) do |f| %>
      <%= f.error_notification %>
      <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>

    <div class="form-inputs">
      <%= f.input :user_id, label: "C: " do %>
        <%= f.select :user_id, User.all.map { |r| [r.first_name, r.id] }, {include_blank: "Select Referee" } %>
      <% end %>
    </div>
    <% end %>
  </div>
<% end %>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

型号:

class Game < ApplicationRecord
    has_many :assignments
    has_many :users, through: :assignments
end
class Assignment < ApplicationRecord
    belongs_to :game
    belongs_to :user
end

如果游戏有 x 个作业,您正在做的是为每个作业渲染表单 x 次。您不需要呈现表单,而是需要 x 个输入字段,因此不是循环表单,而是使用不同的分配 ID 为每个分配循环输入字段,如下所示:

<div>
    <%= form_with @game do |f| %>
        <%= form.fields_for :assignments do |assignment| %>
            <%= assignment.input :user_id, label: "C: " do %>
            <%= assignment.select :user_id, User.all.map { |r| [r.first_name, r.id] }, {include_blank: "Select Referee" } %>
        <% end %>
    <% end %>
</div>