我希望用户能够从我在控制器中设置的方法下载文件。此外,我不希望在用户下载文件时在我的浏览器中更改URL。我已设置此链接
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), target: '_blank' %>
问题是,当生成新选项卡以生成下载时,屏幕会闪烁。这看起来没什么吸引力。我已经看到其他网站,你点击链接,一些东西开始下载,没有闪烁。我该怎么做?
编辑:以下是链接
调用的函数def download_cc
scenario = Scenario.find(params[:scenario_id])
send_data scenario.cc_data, filename: "#{scenario.title}.imscc", type: 'application/zip', :disposition => 'attachment'
end
答案 0 :(得分:1)
只需在链接中添加“下载”属性:
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), download: true %>
答案 1 :(得分:1)
我做了一些本地测试,我的假设是 Turbolinks搞砸了。我建议您从链接中删除target: '_blank'
并添加data: { turbolinks: false }
以选择停用此特定链接的Turbolinks。更改后的代码应如下所示:
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), data: { turbolinks: false } %>
您的控制器操作看起来很好,无需更改。
答案 2 :(得分:0)
删除目标
目前,您正在设置target =&#34; _ blank&#34;,这告诉浏览器,当您单击该URL时,您想要打开一个新选项卡。删除它应该只是开始下载而不打开选项卡或窗口。
&LT;我误解了您的问题,下面是可选的额外信息:&gt;
格式化链接的外观
您是否使用任何HTML或CSS进行网站设计?如果是这样,您可以应用css状态属性,例如&#34; active&#34; &#34;悬停&#34; &#34;访问&#34; &#34;连结&#34;在你的CSS课程中。
让我们说你有一个链接:
<a href="example.com">My Link</a>
如果您创建了css文件并自定义了链接的属性:
a:visited {
text-decoration: none;
}
将允许您更改已访问链接的外观。然后,您可以使用任何css属性以您想要的任何方式自定义外观。
将CSS文件添加到Ruby应用程序
使用Ruby,您可以使用:&lt;%= stylesheet_link_tag&#34; filename&#34; %GT;加载到css文件中。
<强>来源:强> http://www.w3schools.com/css/css_link.asp How do I use CSS with a ruby on rails application?
答案 3 :(得分:0)
只要您使用send_file,就不应该看到屏幕闪烁。
控制器中的scenario_download_cc_path(subscription.scenario)
操作应如下所示:
file_path = File.join(Rails.root, "/public/myfile.whatever")
send_file file_path
无论您的链接是否包含target: '_blank'