为什么我的simple_fields_for没有迭代

时间:2017-04-01 22:01:25

标签: ruby-on-rails-4 simple-form

我有以下(简化)课程:

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个CandidateList个对象的Candidate,并查询数据库以验证它们是否存在并附加。

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

<%= 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 %>

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

: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 %>