2011-07-14 9 views
0

Dans mon application Rails, j'ai un form_for imbriqué dans mon action de show. Ce formulaire est le même que celui de l'action d'édition, mais il a des champs différents.L'action de mise à jour de Rails ne met pas à jour le champ booléen

Category -> Task -> completed (boolean, check_box) est ce que j'essaie de mettre à jour, mais ce n'est pas le cas. Bien que, si je fais Category -> Task -> name (string, text_field) il met à jour bien.

Cela ne fonctionne pas

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

Cela fonctionne

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

C'est une vue partielle et check_list est une variable Je passe

Edit: H avant est la source de mes modèles:

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 
+0

Pourriez-vous coller le code source de vos modèles? – Dogbert

+0

Cela fonctionne-t-il si vous supprimez la condition ': reject_if'? – Dogbert

+0

Oui, cela fonctionne quand j'enlève ': reject_if'. – LanguagesNamedAfterCofee

Répondre

3

Je vous suggère d'ajouter le nom comme un champ caché sur la forme, comme Rails met à jour sans doute tous les champs qui sont passés dans l'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 %> 
+0

Merci, cela a résolu le problème! – LanguagesNamedAfterCofee

Questions connexes