Ransack返回过滤excel或执行过滤删除

时间:2013-08-24 07:19:20

标签: ruby-on-rails excel ransack

我使用ransack过滤产品列表。我现在想重新使用当前选择来返回excel文件(因此我可以在同一页面中将链接“将过滤后的产品下载为excel”)或对过滤后的结果执行删除。例如。被调用的URL看起来像:

http://localhost:3000/products?utf8=%E2%9C%93&q%5Bstatusowner_id_or_client_producer_id_eq%5D=&q%5Bkind_eq%5D=&q%5Bstatus_eq%5D=9&commit=Select

我看到返回excel的最简单方法是传递相同的参数来传递相同的网址,只在产品末尾添加.xls:

http://localhost:3000/products.xls?utf8=%E2%9C%93&q%5Bstatusowner_id_or_client_producer_id_eq%5D=&q%5Bkind_eq%5D=&q%5Bstatus_eq%5D=9&commit=Select

如何重复使用视图中的当前网址来创建新网址?

然后关于批量删除:我不知道如何处理,因为我只使用RESTful路由到目前为止。假设我遵循上述想法并再次重用URL,但将其发送到(尚未定义的)批量删除操作。我应该如何将其作为RESTful路由?只需添加方法::删除?我的控制器在哪里可以路由它?

有点不知所措。

1 个答案:

答案 0 :(得分:3)

我认为关键点在于重用搜索搜索表单和参数,而不是网址。

如果您只想使用索引操作来执行delete或render excel,则可以保持route.rb不变。

在视图中,我假设你有一个搜索表单

<%= search_form_for @products do |f| %>
   # YOUR CONDITIONS
   <%= f.submit 'query' %>  #Just query

   # add two new buttons.
   <button id="output_xls" name="output_xls">Output</button>
   <button id="mass_delete" name="mass_delete">Delete</button>
<% end %>

您可以在2个按钮上使用javascript。单击按钮时,JS会将相应的参数添加到表单并提交它。

$('#output_xls').click(function(){
  $('form').append('<input type="hidden" name="format" value="xls" />');
  $('form').get(0).submit();
});

$('#mass_delete').click(function(){
  $('form').append('<input type="hidden" name="method" value="delete" />');
  $('form').get(0).submit();
});

在控制器中,您可以根据参数决定逻辑。

def index

  #EXECUTE RANSACK SEARCH

  if params.delete(:method) == 'delete'
    #DELETE RECORDS
  end

  respond_to do |format|
    format.html {# DO YOUR REDIRECTING }
    format.xls {# OUTPUT YOUR EXCEL }
  end 
end

请记住在config / initializers / mime_types.rb中注册mime类型。

Mime::Type.register "application/vnd.ms-excel", :xls

我写了很多,如果您有任何问题,请在下面评论:)