我可以告訴你,這是一個很多清潔器只處理刪除全部作爲個人銷燬通過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。乾杯。
是否要從結果表中刪除所有結果? –
@Ireneusz我想刪除表中名爲結果的所有結果,但不是表本身。謝謝 – Benjamin
如果是這樣,那麼Result.delete_all將像你的魅力一樣工作:) –