在rails中创建“删除所有结果”按钮

时间:2011-09-05 14:16:38

标签: ruby-on-rails ruby

我很难理解我必须做些什么才能提供删除所有“结果”的链接

我正在寻找类似的东西:

<%= 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"

3 个答案:

答案 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)

您可能会发现此问题的接受答案非常有用:

Delete multiple item by checkbox

答案 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只需要很少的努力。欢呼声。