我有一个form_tag
的页面,用于确定生成纯文本文件的参数:
<%= form_tag(remessa_individual_boletos_path, :method => "get", :target => "_blank", :class => "form_change_action", :id => "form-remessa") do %>
...
提交表单后,需要检查一些内容,如果出现问题,我必须通知用户。在系统的其余部分完成此操作的方法是重定向并在警报中显示消息:
redirect_to :back, alert: "É necessário definir o limite de remessas por dia da conta bancária."
实际生成和下载文件的代码行是send_data
:
send_data @geraboleto.geraremessaboletoindividual(params[:banco_id], current_user.id), :content_type => 'text/plain', :filename => @geraboleto.filename
然而,当实际上出现错误时,:target => "_blank"
不会简单地刷新页面并显示警告,而是打开一个新的选项卡,其中包含与表单所在页面相同的URL,因此用户最终在同一地址中有两个选项卡,但警报显示在原始选项卡上,此时此处不可见,因为新选项卡位于屏幕上,这意味着用户可能看不到警报而不理解原因他们的文件没有生成。
当我删除:target => "_blank"
并提交表单时,如果出现错误,则会发生预期的行为:页面刷新并显示警报。但是,当没有错误发生时,文件生成但没有下载(没有提示保存或打开文件),所以我假设我需要这段代码......
总结一下:我需要能够通过send_data
下载文件,我认为我需要:target => "_blank"
,但我还需要能够向用户显示提醒当发生错误时,:target => "_blank"
似乎是一个问题。我怎样才能使这两种情况起作用?
答案 0 :(得分:0)
无需添加"_blank"
目标来下载文件,只需让控制器操作中的send_data
。
# your/view.html.erb
<%= form_tag(remessa_individual_boletos_path, :method => "get", ...) do %>
# ...
# YourController
def action
if valid?
send_data ...
else
redirect_to :back, alert: 'Alert message'
end
end