2012-03-15 57 views
0

我剛剛在3天前開始使用rails編程,同時學習了ruby,自從昨天開始研究如何使用一種形式,刪除/更新我的一些實例,我只使用一個模型「任務」。下面的代碼:如何使用一種形式在rails中刪除/更新多個實例

<%= 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 2012-03-15 00:50:26

回答

0

的問題是,你正在做的是錯誤的(我會告訴你爲什麼)。我可以粘貼可以使其工作的代碼,但我更願意解釋,因爲您可能正在學習。

Task.find(:all, :conditions => ["done = ?", true])將在您的數據庫中返回EVENTTHING,其中done = true。您將刪除DATABASE中標記爲已完成的所有內容,而不是表單中標記的內容。 Task是你的模型,你可以通過使用find,whererecord和activerecord的其他方法來訪問數據庫(如果activerecord聽起來不太自然,activerecord可以讓你從數據庫中獲取東西,而不需要編寫SQL查詢)。

你真正需要在你的控制器中執行的操作是: - 你必須得到從表格發送的內容(檢查文檔/網頁資源的使用param[])。 - 對於標記爲true的每個複選框,您將刪除一條記錄。 (你得到了每個部分的權利,這是很好!)

我不認爲你的觀點是正確的,我建議你首先確保你收到的數據是正確的(params []),然後繼續嘗試刪除記錄,或者做任何你想做的事情。

要「測試」您的控制器和模型內部的變量和代碼,請使用print @variable或其他內容(請檢查rails文檔如何調試)。

我建議你使用破壞而不是刪除,因爲其他同胞stackoverflowers說過。閱讀銷燬和刪除文檔。

繼續:)

+0

謝謝!你救了我的命!我無法找到適當的答案。我真的很慚愧於模型與表達式的混淆。(我得到了你說的一切,我將檢查params的用法並進行測試。 – 2012-03-15 01:36:53

0

在乍看之下,嘗試使用task.destroy,而不是task.delete,並且done代替task.donedelete vs. destroy.

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

    @tasks = Task.all 
end 
+0

我用你的代碼,這一次它返回一個空白頁...並且我檢查它沒有路由到銷燬路徑,而是去創建「/任務」。所以我試圖在創建控件上做一些事情,但沒有發生任何事情......所以令人困惑; x – 2012-03-15 01:26:00

相關問題