Frage

Ich mache eine einfache To-do-Liste Anwendung auf mich zu lehren Ruby on Rails, aber ich habe auf ein Problem stoßen. Ich habe eine einfache Form, die links von ihnen mit einem Kontrollkästchen To-do-Artikel auflistet, und ein „Update“ -Button am unteren Rande, wie es so:

[] Haben die Gerichte
Nehmen Sie [], um den Müll
[] Der Welt
übernehmen (Update)

Jeder To-do-Artikel ist ein separater Datensatz in der Datenbank mit einem „abgeschlossen“ boolean Feld. Ich möchte, dass die Form einer Aktion eine Liste der überprüften-off Punkt-IDs zu unterbreiten, in dem ich jeden zu wahren „erledigt“ Feld des Elements festlegen können, die sie aus der Sicht verbergen.

Ich weiß, wie ein Formular zu machen, die mehrere Modelle referenziert, aber nicht eine, die mehrere Datensätze des gleichen Modells verweist. Irgendwelche Tipps?

Danke!

War es hilfreich?

Lösung

Railscasts ist dein Freund!

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

Es ist wirklich einfach:

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

Andere Tipps

Wow. Das ist einige Timing. Der Artikel direkt vor dieser Frage in meinem RSS-Reader ist die neueste Railscast von Ryan Bates und es scheint, genau zu decken, was Sie fordern.

Warum nicht eine Remote-Funktion verwenden, um die Datenbank zu aktualisieren, wenn ein Element markiert ist, und erhalten von der Update-Button ganz los zu werden?

Da Sie die ID für jeden Datensatz enthalten können, wenn Sie Ihr Formular erstellen möchten Sie die Steuerung durch die Elemente iterieren in Ihnen dann Post und jede dieser Aufzeichnungen entsprechend aktualisieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top