如何在一个视图中为一个模型设置多个表单
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>
我需要通过将所有分配以一种形式关联到游戏来设置游戏分配。当我转到 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>