Действие обновления Rails не обновляет логическое поле - PullRequest
0 голосов
/ 14 июля 2011

В моем приложении 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

1 Ответ

3 голосов
/ 14 июля 2011

Я бы предложил добавить имя в качестве скрытого поля в форме, так как 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 %>
...