我希望用户能够通过我在控制器中设置的方法下载文件。此外,我不希望当用户下载文件时浏览器中的 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
我做了一些本地测试,我的假设是 Turbolinks 搞砸了。我建议您从链接中删除
target: '_blank'
并添加 data: { turbolinks: false }
以选择退出此特定链接的 Turbolinks。更改后的代码应如下所示:
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), data: { turbolinks: false } %>
您的控制器操作看起来不错,无需更改。
只需在您的链接中添加“下载”属性即可:
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), download: true %>
删除目标
目前,您正在设置 target="_blank",这是告诉浏览器,当您单击该 URL 时,您想要打开一个新选项卡。删除它应该会开始下载,而无需打开选项卡或窗口。
< Optional extra info below as I misread your question: >
设置链接外观的格式
您是否使用任何 HTML 或 CSS 来设计网站?如果是这样,您可以在 css 类中应用 css 状态属性,例如“active”“hover”“visited”“link”。
假设您有一个链接:
<a href="example.com">My Link</a>
如果您创建了 css 文件并自定义了链接的属性:
a:visited {
text-decoration: none;
}
这将允许您更改访问过的链接的外观。然后,您可以使用任何 css 属性以您想要的任何方式自定义外观。
将 CSS 文件添加到 Ruby 应用程序
使用 Ruby,您可以使用: <%= stylesheet_link_tag "filename" %> 加载 css 文件。
来源: http://www.w3schools.com/css/css_link.asp 如何在 ruby on Rails 应用程序中使用 CSS?
只要您使用send_file,您就不应该看到屏幕闪烁。
控制器中的
scenario_download_cc_path(subscription.scenario)
操作应如下所示:
file_path = File.join(Rails.root, "/public/myfile.whatever")
send_file file_path
无论您的链接是否包含
target: '_blank'
,Chrome 和 IE 上的行为都是相同的