型号 - 用于上传

时间:2014-01-06 02:14:41

标签: ruby-on-rails paperclip

我正在构建一个rails应用程序,用户在登录后上传文档,然后在文档完成后下载文档。我正在尝试为能够上传使用回形针

的文档的用户创建模型

这个模型是否可以作为上传文档的模型,我已经有了一个用户模型

rails generate scaffold pdf description:string

1 个答案:

答案 0 :(得分:1)

根据您的问题判断,我猜测您是Rails的新手,所以我会为您解释上传过程:


<强>模型

上传文件可以使用Paperclip处理,如下所示:

#app/models/document.rb
Class Document < ActiveRecord::Base
    belongs_to :user # -> allows you to call @user.documents
    has_attached_file :attachment #-> for Paperclip
end

#app/models/user.rb
Class User < ActiveRecord::Base
    has_many :documents # -> allows you to call @user.documents
end

您的数据表将如下所示:

users
id | name | etc | etc | created_at | updated_at

documents
id | user_id | attachment_file_name | attachment_content_type | attachment_file_size | attachment_uploaded_at | created_at | updated_at

上传

要上传所需的项目,Paperclip基本上会创建一个单独的ActiveRecord对象,其内部附件

这意味着您必须在视图中调用上传内容,您需要在document对象上调用对象(方法):

@user.documents.each do |document|
    image_tag document.attachment.url #-> outputs the image
end

上传过程的工作方式非常简单:

#app/controllers/documents_controller.rb
def new 
    @document = Document.new
end

def create
    @document = Document.new(document_params)
    @document.save
end

private
def document_params
    params.require(:document).permit(:attachment).merge(user_id: current_user.id)
end

这将允许您创建此表单:

#app/views/documents/new.html.erb
<%= form_for @document, html: { miltipart: true } do |f| %>
    <%= f.file_field :attachment %>
<% end %>

这将保存数据库和文件中的文件。服务器,允许您在整个视图中访问它们