Ken*_*ast 1 ruby-on-rails download
我正在尝试从服务器进行简单的下载。这是使用 Rails 5.01,Ruby 2.24p230。
该视图具有到控制器的链接以下载数据。它到达那里就好了。
控制器方法就是这样:
def download
send_data("some sample text", filename:sample.txt)
flash[:success] = "it worked"
end
Run Code Online (Sandbox Code Playgroud)
结果是一个名为 sample.txt 的包含正确文本的文件被下载到客户端。闪光永远不会发生。链接到控制器的视图仍然在屏幕上,没有任何页面刷新。永远不会调用名为“download.html.erb”的视图。
我的问题是:
是否有一种简单的方法可以在 send_data 之后与客户端进行一些通信?在成功下载后告诉客户端上的人会很好。
在 send_data 之后,应该发生什么?
感谢您抽出时间来回答这个问题。
要了解这里发生了什么,您必须了解会话和闪烁的工作原理。
一个 flash 消息存储在会话中并继续进行下一个请求。当请求完成时,来自先前请求的闪存消息将从存储在会话中的“闪存哈希”中删除。
class TestController
# GET /foo
def foo
flash[:notice] = "Hello"
redirect_to '/bar'
end
# GET /bar
def bar
flash.now[:alert] = " world!"
end
end
Run Code Online (Sandbox Code Playgroud)
因此,当用户请求时,/foo他们被重定向到/barFlash 哈希将包含:
{
notice: "Hello",
alert: " world!"
}
Run Code Online (Sandbox Code Playgroud)
那么这有什么关系呢?当客户端单击下载按钮时,您设置的 Flash 消息将在它们执行的下一个请求中看到。这不是那么有用。相反,您想要做的可能只是使用 javascript 并在用户单击下载链接时显示弹出窗口或某种消息。
当您向客户端发送数据时,实际上很少有人会允许您设置要遵循的任何类型的重定向,或者会忽略您发送的任何标头。这是因为大量潜在的烦人或恶意用途。
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |