Question

Je fais simple à faire application de liste pour me enseigner Ruby on Rails, mais j'ai rencontré un problème. J'ai une forme simple qui énumère les éléments des choses à faire avec une case à cocher à gauche d'entre eux, et un bouton « Mise à jour » en bas, comme ceci:

[] faire la vaisselle
[] Sortez les ordures
[] Prenez le monde
(Mise à jour)

Chaque élément à faire est un enregistrement séparé dans la base de données avec un « complété » champ booléen. Je veux que le formulaire pour soumettre une liste des ids éléments cochés-off à une action dans laquelle je peux définir « terminé » de chaque élément du champ à true, ce qui les cacher de la vue.

Je sais comment faire une forme qui fait référence à plusieurs modèles, mais qui ne fait référence à plusieurs enregistrements du même modèle. Des conseils?

Merci!

Était-ce utile?

La solution

Railscasts est votre ami!

http://railscasts.com/episodes/52-update-through-checkboxes

Il est très simple:

# routes.rb
map.resources :tasks, :collection => { :complete => :put }

# tasks_controller.rb
def complete
  Task.update_all(["completed_at=?", Time.now], :id => params[:task_ids])
end

# views\tasks\complete.html.erb
<% form_tag complete_tasks_path, :method => :put do %>
  <ul>
  <% for task in @incomplete_tasks %>
    <li>
      <%= check_box_tag "task_ids[]", task.id %>
      <%= task.name %>
    </li>
  <% end %>
  </ul>
  <%= submit_tag "Mark as Complete" %>
<% end %>

Autres conseils

Wow. C'est un certain moment. L'élément juste avant cette question dans mon lecteur RSS est la dernière Railscast de Ryan Bates et il semble couvrir exactement ce que vous demandez.

Pourquoi ne pas utiliser une fonction télécommande pour mettre à jour la base de données lorsqu'un élément est vérifié, et de se débarrasser du bouton de mise à jour tout à fait?

Comme vous pouvez inclure l'ID pour chaque enregistrement lorsque vous créez votre formulaire, vous voulez que le contrôleur itérer articles en vous puis après trouver et mettre à jour chacun de ces dossiers en conséquence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top