我很难理解我必须做些什么才能提供删除所有“结果”的链接
我正在寻找类似的东西:
<%= 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 :(得分:8)
也许这会对你有所帮助:
在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 %>
和控制器的动作(在app / controller / results_controller.rb中):
def remove_all
Result.delete_all
flash[:notice] = "You have removed all results!"
redirect_to results_path
end
答案 1 :(得分:2)
您可能会发现此问题的接受答案非常有用:
答案 2 :(得分: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只需要很少的努力。欢呼声。