gpt4 book ai didi

ruby-on-rails - Ransack 返回过滤的 excel 或执行过滤的删除

转载 作者:行者123 更新时间:2023-12-03 02:52:49 30 4
gpt4 key购买 nike

我正在使用 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 的最简单方法是传递相同参数,即传递相同的 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

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

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

有点不知所措。

最佳答案

我认为关键点是重用ransack搜索表单和参数,而不是url。

如果你只是想使用索引 Action 来执行删除或渲染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();
});

在 Controller 中,您可以根据参数决定逻辑。

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

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

关于ruby-on-rails - Ransack 返回过滤的 excel 或执行过滤的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18416085/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com