ruby-on-rails - Ruby on Rails send_file, Controller 操作中的代码运行两次

标签 ruby-on-rails ruby carrierwave

我在用户可下载文件方面遇到了一个奇怪的问题,文件下载正常,但 Controller 操作中的其他代码执行了两次。我正在使用 CarrierWave,它安装在 .file 的文档模型上。

我希望用户能够单击此链接下载文件:

<%= link_to document.file.file.filename, document_path(document)  %>

这是我的 Controller 的样子:

  def show
    document = Document.find(params[:id])

    # Track this download
    CourseDownload.create(course: document.course, user: current_user)   

    # Download the file
    send_file 'public' + document.file.url.to_s
  end

当我单击链接时,文件下载,但创建了 2 个 CourseDownload 记录。在日志中,GET 请求似乎发生了两次:

Started GET "/documents/1" for 127.0.0.1 at 2014-04-17 18:12:47 -0400
Processing by DocumentsController#show as HTML
  Parameters: {"id"=>"1"}
  Document Load (0.2ms)  SELECT "documents".* FROM "documents" WHERE "documents"."id" = ? LIMIT 1  [["id", "1"]]
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'xxx' LIMIT 1
  CACHE (0.0ms)  SELECT "documents".* FROM "documents" WHERE "documents"."id" = ? LIMIT 1  [["id", "1"]]
public/uploads/document/file/1/bootstrap-3.0.0.zip
Sent file public/uploads/document/file/1/bootstrap-3.0.0.zip (0.1ms)
Completed 200 OK in 7ms (ActiveRecord: 0.4ms)


Started GET "/documents/1" for 127.0.0.1 at 2014-04-17 18:12:47 -0400
Processing by DocumentsController#show as HTML
  Parameters: {"id"=>"1"}
  Document Load (0.2ms)  SELECT "documents".* FROM "documents" WHERE "documents"."id" = ? LIMIT 1  [["id", "1"]]
  User Load (0.1ms)  SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'xxx' LIMIT 1
  CACHE (0.0ms)  SELECT "documents".* FROM "documents" WHERE "documents"."id" = ? LIMIT 1  [["id", "1"]]
public/uploads/document/file/1/bootstrap-3.0.0.zip
Sent file public/uploads/document/file/1/bootstrap-3.0.0.zip (0.1ms)
Completed 200 OK in 5ms (ActiveRecord: 0.3ms)

知道我做错了什么吗?

谢谢!

最佳答案

问题最终是由 turbolinks 引起的明白了。

解决方式:

<%= link_to document.file.file.filename, document_path(document), 'data-no-turbolink' => true %>

关于ruby-on-rails - Ruby on Rails send_file, Controller 操作中的代码运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23144584/

相关文章:

ruby-on-rails - 使用 Dokku 部署 Rails - Dokku@Dokku.me 密码?

ruby-on-rails - 设计如何向创建用户表单添加附加字段?

ruby-on-rails - 关于 heroku 上的 ffmpeg 的错误我们很抱歉,但出了点问题。如果您是应用程序所有者,请查看日志以获取更多信息

ruby-on-rails-3 - 从一个 S3 读取图像并写入另一个 S3 时获取 Excon::Errors::SocketError?

ruby-on-rails-3.1 - Carrierwave Gem - Heroku - Fog Gem 配置 - 给出名称错误

ruby-on-rails - 在 Rails 3 中将现有的 has_many 关系更改为多态

ruby-on-rails - 使用 'reform' gem 和嵌套路由

ruby - 如何 `break` 闭包中的外部循环(Proc,lambda)?

ruby - Ruby Prime 对象在初始化时是否带有固定数量的素数?

arrays - 在 Ruby 中一行打印数组元素