0

在我的 Rails 应用程序中,我有一个嵌套form_for在我的显示动作中。此表单与编辑操作中的表单相同,但具有不同的字段。

Category -> Task -> completed (boolean, check_box)是我要更新的内容,但事实并非如此。虽然,如果我这样做Category -> Task -> name (string, text_field),它会更新得很好。

这不起作用

<%= form_for check_list do |f| %>
  <%= f.error_messages %>
  <% count = 0 %>
  <ol>
  <%= f.fields_for :tasks do |task| %>
    <li>
      <%= task.label :completed, check_list.tasks[count].name %>
      <%= task.check_box :completed %>
    </li>
    <% count += 1 %>
  <% end %>
  </ol>
  <p><%= f.submit 'Update' %></p>
<% end %>

这有效

<%= form_for check_list do |f| %>
  <%= f.error_messages %>
  <% count = 0 %>
  <ol>
  <%= f.fields_for :tasks do |task| %>
    <li>
      <%= task.label :name, check_list.tasks[count].name %>
      <%= task.text_field :name %>
    </li>
    <% count += 1 %>
  <% end %>
  </ol>
  <p><%= f.submit 'Update' %></p>
<% end %>

这是部分的,并且check_list是我要传递的变量

编辑: 这是我的模型的来源:

class CheckList < ActiveRecord::Base
  has_many :tasks, :dependent => :destroy
  accepts_nested_attributes_for :tasks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true

  # Validations
  validates :name, :presence => true

end

class Task < ActiveRecord::Base
  belongs_to :check_list
end
4

1 回答 1

3

我建议将名称添加为表单上的隐藏字段,因为 Rails 可能会更新传递给 Action 的所有字段。

<%= form_for check_list do |f| %>
  <%= f.error_messages %>
  <% count = 0 %>
  <ol>
  <%= f.fields_for :tasks do |task| %>
    <li>
      <%= task.label :completed, check_list.tasks[count].name %>
      <%= task.check_box :completed %>
      <%= task.hidden_field :name %>
    </li>
    <% count += 1 %>
  <% end %>
  </ol>
  <p><%= f.submit 'Update' %></p>
<% end %>
  <% end %>
  </ol>
  <p><%= f.submit 'Update' %></p>
<% end %>
于 2011-07-14T19:39:42.567 回答