2012-03-15 4 views
0

3日前にレールでプログラミングを始めました。同時にルビーを学びました。そして、昨日から1つのフォーム、私のインスタンスのいくつかを削除/更新、私は1つのモデル "タスク"を使用します。ここでは、コードがあります:いくつかのインスタンスをレールで1つのフォームで削除/更新する方法

<%= form_for @task do |f| %> 
    <ul> 
    <% @tasks.each do |task| %> 
     <li id="task"><%= f.check_box :done %> <%= f.label :name %> </li> 
    <% end %> 
    <button onclick="doUpdate()">Mark Selected as done </button> 
    <%= button_to "Delete selected", :method => :delete %> 
    </ul> 
<% end %> 

ここでコントローラです:

def delete 
    @tasks = Task.find(:all, :conditions => ["task.done = ?", true]) 
    @tasks.each do |task| 
    task.delete 
    end 

    @tasks = Task.all 
end 

私のモデルは、2つのパラメータを持っています。 name:Stringとdone:Boolean、選択したすべてのチェックボックスを削除しないでください。しかし、これは私のためには機能しません

ありがとうございます。一見

+0

あなたが見ている問題は何ですか?例外はありますか? – KMC

答えて

0

問題がある、あなたは間違ってそれをやっている(と私はなぜあなたを教えてあげましょう)。私はそれを動作させるコードを貼り付けることができますが、あなたがたぶんそれを学んでいるように、説明したいと思います。

Task.find(:all, :conditions => ["done = ?", true])は、done = trueのデータベースですべてを返します。フォームにマークされているものではなく、DATABASEで完了したものとしてマークされているものはすべて消去します。 Taskあなたのモデルは、あなたがアクティブレコードから検索、どこか他のメソッドを使用してデータベースにアクセスすることができます(activerecordが当然ではない場合、activerecordはSQLクエリを書く必要なしにデータベースから取得できます)。

コントローラで本当に必要なのは、 です。フォームから送信された内容を取得する必要があります(param[]の使用方法については、ドキュメント/ Webリソースを参照してください)。 - trueとマークされているチェックボックスごとに、レコードを消去します。

私はあなたの意見が正しいとは思わないが、あなたが受け取ったデータが正しいことを確認してから(params [])、次に正しいことを確認することをお勧めします。レコードを消去しようとするか、それとも何かしたいことをやり直してください。

あなたのコントローラとモデルの中にある変数とコードを "テストする"には、print @variableなどを使用してください(rails docsのデバッグ方法を確認してください)。

削除の代わりに破棄を使用することをお勧めします。破棄と削除の文書を読んでください。

行くください:)

+0

おかげで男!あなたは私の命を救いました!私はこれに対して適切な答えを見つけることができませんでした。私は本当にモデルをフォーム=と混同しているのを恥ずかしく思っています(あなたが言ったことはすべて得ました。私はパラメータの使用をチェックし、テストをするつもりです。 –

0

、代わりにtask.deletetask.destroyを使用してみてください、と代わりにtask.donedone参照delete vs. destroy.

def destroy 
    @tasks = Task.find(:all, :conditions => ["done = ?", true]) 
    @tasks.each do |task| 
    task.destroy 
    end 

    @tasks = Task.all 
end 
+0

私はあなたのコードを使用しましたが、今回は空白のページを返しました...そして、私が確認したように、破壊パスにルーティングされず、代わりに "/ tasks"を作成するために行きました。だから私はコントロールを作成して何かをしようとしましたが、何も起こっていません...混乱するので、x –

関連する問題