2009-06-08 5 views
8

Ruby on Railsを教えるためのシンプルなTo-doリストアプリケーションを作っていますが、問題に遭遇しました。私は簡単なフォームを持っていて、その左側にチェックボックスがあり、下に「更新」ボタンがあります:1つのRuby on Railsフォームで複数のレコードを編集するにはどうすればよいですか?

[]皿を作る
[]ごみ
は []それぞれに-Do項目は、「完了」ブールフィールドで、データベース内の別のレコードです

(更新)
世界を引き継ぎます。私はフォームがチェックアウトされたアイテムIDのリストを、各アイテムの "completed"フィールドをtrueに設定できるアクションに提出して、それらをビューから隠すようにします。

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

ありがとうございます!

+1

あなたは、現在のコントローラのコードを投稿することができますか? – csexton

+0

私はまだ何も持っていません。私はまだコントローラにデータを渡すためにフォームを設定する方法について、概念的に考えています。 –

答えて

25

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

ありがとうルーク、これは私が探しているようです。 –

+0

美しいコード、読みやすい。 – s84

+0

ラベルが '

1

アイテムがチェックされたときにリモート機能を使用してデータベースを更新し、更新ボタンを一掃してみませんか?

+0

私はそれを後で考えていますが、デバッグをもっと難しくしているように見えるので(少なくとも、それは私が得た印象です)、この時点では愚かな間違いのトン。 –

0

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

+0

私はあなたが言っていることを見ていると思います。 ToDo項目のIDを使用して各チェックボックスに(非モーダルform_tag形式で)名前を付け、コントローラー内のハッシュを反復して、それに応じてレコードを変更しますか?私が念頭に置くべきこのアプローチには、潜在的な問題がありますか? –

2

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

+0

頭がおかげでうまくいきました! –

関連する問題