2011-09-05 48 views
1

我有困難的確切理解什麼是我必須做的,提供一個鏈接,刪除所有的我的「結果」創建一個「刪除所有結果」在軌按鈕

我在尋找類似:

<%= button_to 'Remove All', @results, delete_all %> 

我正在使用mysql。

編輯 的routes.rb:

Productfinder::Application.routes.draw do 
resources :contacts 
resources :helps 
get "help/index" 
resources :results 
resources :extensions 
resources :websites 
resources :words 
resources :results do 
collection do 
get 'remove_all' 
end 
end 
get "home/index" 
root :to => "results#index" 
+0

是否要從結果表中刪除所有結果? –

+0

@Ireneusz我想刪除表中名爲結果的所有結果,但不是表本身。謝謝 – Benjamin

+0

如果是這樣,那麼Result.delete_all將像你的魅力一樣工作:) –

回答

8

也許這將有助於你:

in routes.rb您應該添加:

#rails 3.0 
resources :results do 
    collection do 
    get 'remove_all' 
    end 
end 

#rails 2.3 
map.resources :results, :collection => { :remove_all => :get } 

在某些視圖中,您可以添加此鏈接:

<%= link_to "Remove All", remove_all_results_path, :method => :get %> 

和控制器的動作(在應用程序/控制器/ results_controller.rb):

def remove_all 
    Result.delete_all 
    flash[:notice] = "You have removed all results!" 
    redirect_to results_path 
end 
+0

小心,'Result.delete_all'將截斷該數據庫表。我不認爲這就是他想要的;) – netmute

+0

他想刪除他所有的結果,所以我想他想清除Result table :)但是我們不應該猜測,我們應該問他:) –

+1

Thankyou很長久。然而,使用這個我得到錯誤「無法找到ID = remove_all結果」有什麼建議嗎? – Benjamin

1

我可以告訴你,這是一個很多清潔器只處理刪除全部作爲個人銷燬通過JavaScript調用你的表中的複選框。這是我做的(使用prototype.js):

function delete_selected() { 
    var table_id; 
    $$('table.data tr td.selector "]').each(function(e) { 
    table_id = e.up('table').id; 
    var id = e.up('tr').id; 
    var destroy_link = e.up('tr').down('td#destroy a'); 

    var method = 'delete', url = destroy_link.readAttribute('href'); 

    var csrf_param = $$('meta[name=csrf-param]')[0], csrf_token = $$('meta[name=csrf-token]')[0]; 

    var params = {}; 
    params[csrf_param.readAttribute('content').toString()] = csrf_token.readAttribute('content'); 

    if (csrf_param) { 
     new Ajax.Request(url, {  
     'method': method, 
     'parameters': params, 
     onSuccess: function (transport) { 
      highlight_row(e.up('tr'), 'deleted'); 
     }, 
     asynchronous: true 
     }); 
    } 
    }); 

這是必要的Ruby代碼和數據示例表(它非常類似於默認):

<%= csrf_meta_tag %> 

<a href="#" onclick="delete_selected();">delete selected</a> 

<table id="categories" class="data"> 
    <thead> 
    <tr> 
     <th class="selector"><input id="all" type="checkbox" /></th> 
     <th id="id" class="value">Id</th> 
     <th id="name" class="value">Name</th> 
     <th id="show" class="action"></th> 
     <th id="edit" class="action"></th> 
     <th id="destroy" class="action"></th> 
    </tr> 
    </thead> 

    <tbody> 
    <% @categories.each do |category| %> 
    <tr id="<%= category.id %>"> 
     <td class="selector"><input type="checkbox" /></td> 
     <td id="id" class="value"><%= category.id %></td> 
     <td id="name" class="value"><%= category.name %></td> 
     <td id="show" class="action"><%= link_to 'Show', category %></td> 
     <td id="edit" class="action"><%= link_to 'Edit', edit_category_path(category) %></td> 
     <td id="destroy" class="action"><%= link_to 'Destroy', category, :confirm => 'Are you sure?', :method => :delete %></td> 
    </tr> 
    <% end %> 
    </tbody> 
</table> 

可以忽略highlight_row 。這只是一個幫助函數,用於突出顯示並從表中刪除已刪除的對象(無需重新加載頁面)。我把它留在那裏,這樣你就可以看到如何管理回調。

無論如何,我知道它不是一個純粹的ruby修復程序,但正如您所看到的,只需很少的努力就可以將其從delete_selected轉換爲delete_all。乾杯。

相關問題