【问题标题】:Ransack returning filtered excel or executing filtered deleteRansack 返回过滤后的 excel 或执行过滤后的删除
【发布时间】:2013-08-24 07:19:20
【问题描述】:

我正在使用 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 的最简单方法是传递 same 参数是传递相同的 URL,在产品末尾添加一个 .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

如何在视图中重用当前 URL 来创建新 URL?

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

有点茫然。

【问题讨论】:

    标签: ruby-on-rails excel ransack


    【解决方案1】:

    我觉得关键是重用了ransack搜索表单和参数,而不是url。

    如果你只是想使用索引动作来执行删除或渲染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
    

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

    【讨论】:

    • 感谢您的详细解答。我觉得javascript没有必要。 railscasts.com/episodes/38-multibutton-form 中有一些内容。我将尝试将两者结合起来并在此处发布任何结果。
    • @Kostas Georgokitsos 你在没有 javascript 的情况下让它工作了吗?
    • 我使用了完全不同的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多