9

Ruby on Rails を独学するために簡単な To Do リスト アプリケーションを作成していますが、問題が発生しました。左にチェックボックスがあり、下部に「更新」ボタンがあるTo Doアイテムをリストする単純なフォームがあります。

[ ] 料理
をする [ ] ゴミを出す
[ ] 世界を乗っ取る
(更新)

各 To Do 項目は、「完了」ブール フィールドを持つデータベース内の個別のレコードです。各アイテムの「完了」フィールドをtrueに設定できるアクションに、チェックオフされたアイテムIDのリストを送信するフォームが必要です。これにより、それらがビューから非表示になります。

複数のモデルを参照するフォームの作成方法は知っていますが、同じモデルの複数のレコードを参照するフォームは作成できません。任意のヒント?

ありがとう!

4

4 に答える 4

26

Railscastsはあなたの友達です!

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

それは本当に簡単です:

# 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 %>
于 2009-06-08T09:34:46.607 に答える
2

わお。それはあるタイミングです。私の RSS リーダーのこの質問の直前の項目は、Ryan Bates による最新のrailscastであり、あなたが求めていることを正確にカバーしているようです。

于 2009-06-08T09:27:48.370 に答える
1

アイテムがチェックされたときにリモート関数を使用してデータベースを更新し、更新ボタンを完全に削除してみませんか?

于 2009-06-08T03:40:39.213 に答える
0

フォームを作成するときに各レコードの ID を含めることができるため、コントローラーが投稿内のアイテムを反復処理し、それに応じてそれらの各レコードを見つけて更新する必要があります。

于 2009-06-08T03:42:00.587 に答える