为什么我的 simple_fields_for 没有迭代

Why is my simple_fields_for not iterating

我有以下(简体)类:

class CandidateList < ActiveRecord::Base
  has_many :candidates, inverse_of: :candidate_list, dependent: :destroy
  ...
end

class Candidate < ActiveRecord::Base
  belongs_to :candidate_list, inverse_of: :candidates
  ...
end

在我的控制器中,我创建了一个包含 10 个 Candidate 对象的 CandidateList 并查询数据库以验证它们是否存在并已附加。

在我的表格中,我有以下内容:

<%= simple_form_for save_bingo_terms_path( candidate_list_id: @candidate_list ) do |f| %>
  ...
  <%= @candidate_list.candidates.count %>
  <table>
    <%= f.simple_fields_for :candidates do |cf| %>
    <tr>
      <td><%= cf.input :name, label: false %></td>
      <td><%= cf.input :definition, label: false %></td>
    </tr>
    <% end %>
<% end %>

任何人都可以帮助我理解为什么它只显示 table 中的一行,其中包含 namedefinition 的输入字段,即使 count 输出table 上方显示 10?

提前致谢!

:candidates 与 @candidate_list 对象没有关联,它与 save_bingo_terms_path

关联

simple_form_for 更改为

<%= simple_form_for @candidate_list do |f| %>

并且不要忘记指定...

class CandidateList < ActiveRecord::Base
  has_many :candidates, inverse_of: :candidate_list, dependent: :destroy
  accepts_nested_attributes_for :candidates
  ...
end

或者您可以显式指定一个 each 循环并引用每个候选

<% @candidate_list.candidates each do |candidate| %>
  <% f.simple_fields_for :candidates, candidate do |cf| %>
    <tr>
      <td><%= cf.input :name, label: false %></td>
      <td><%= cf.input :definition, label: false %></td>
    </tr>
  <% end %>
<% end %>