8

我需要我的用户在他们的个人资料上上传广告 pdf 和 txt 等文件。我使用 Carrierwave 做到了这一点,所以我有一个带有标题和 URL 的文档列表。

但是我怎样才能让其他用户下载这些文件呢?我必须使用宝石还是因为我对 Rails 很陌生,所以我什至不知道本地的东西?

谢谢

编辑:

社会.rb

class Society < ActiveRecord::Base
  ...
  has_many :documents, :dependent => :destroy
end

文件.rb

class Document < ActiveRecord::Base
  belongs_to :society    
  mount_uploader :url, DocumentUploader    
end

然后在我要下载文件的视图中:

  <% @society.documents.each do |doc| %>
    <%= link_to "Download it", doc.url %>    //url is the column name of the saved url
  <% end %>
4

3 回答 3

12

我不使用 Carrierwave,但我想它类似于 Paperclip。

因此你应该能够使用这样的东西

 link_to 'Download file', user.file.url

这是假设您有一个来自具有“文件”载波属性的模型的用户实例化对象。将此替换为您的属性名称。

于 2012-07-27T14:57:37.273 回答
11

You can use the send_file method for this. Which could look like:

class MyController
  def download_file
    @model = MyModel.find(params[:id])
    send_file(@model.file.path,
          :filename => @model.file.name,
          :type => @model.file.content_type,
          :disposition => 'attachment',
          :url_based_filename => true)
  end
end

Check the apidock link for more examples.

于 2012-07-27T14:55:10.350 回答
0

或者你可以放置锚标签:

在您的控制器中:

@doc = "query to get the document name from your database"
@docpath = request.base_url+"/uploads/"+@doc

在你看来:

<a href="@docpath" download>Download File</a>.
于 2019-08-25T11:15:08.340 回答