简体   繁体   English

如何通过Paperclip rails 4上传图像,文档文档和/或PDF文件

[英]How to upload image, word docs and/or PDF files via Paperclip rails 4

I would like to enable users to upload Word Docs and PDF files to my rails application. 我想让用户将Word文档PDF文件上传到我的rails应用程序。 My app is similar to a Pinterest app, users can create Pins where they attach a picture followed by a description (used Paperclip to attach the image to the Pin ). 我的应用程序类似于Pinterest应用程序,用户可以创建Pins ,其中附加图片后跟描述(使用Paperclip将图像附加到Pin )。

Here is my Pins model: 这是我的Pins模型:

class Pin < ActiveRecord::Base
    belongs_to :user
    has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }
    validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] }
    validates :image, presence: true

    end

My Pins controller: 我的Pins控制器:

class PinsController < ApplicationController
  before_action :set_pin, only: [:show, :edit, :update, :destroy]
  before_action :correct_user, only: [:edit, :update, :destroy]
  before_action :authenticate_user!, except: [:index, :show]

  def index
    @pins = Pin.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 15)
  end

  def show
  end

  def new
    @pin = current_user.pins.build
  end

  def edit
  end

 def create
    @pin = current_user.pins.build(pin_params)
    if @pin.save
      redirect_to @pin, notice: 'Pin was successfully created.'
    else
      render action: 'new'
    end
  end

  def update
    if @pin.update(pin_params)
      redirect_to @pin, notice: 'Pin was successfully updated.'
    else
      render action: 'edit'
    end
  end

  def destroy
    @pin.destroy
    redirect_to pins_url
  end

  private

    def set_pin
      @pin = Pin.find(params[:id])
    end

    def correct_user
      @pin = current_user.pins.find_by(id: params[:id] )
      redirect_to pins_path, notice: "Not authorized to edit this Pin" if @pin.nil?
    end


    def pin_params
      params.require(:pin).permit(:description, :image)
    end
end

I wonder if I just need to create another has_attached_file method for the Word docs and PDFs files within my Pin model and then create a view for users to upload the file. 我想知道我是否只需要为我的Pin模型中的Word文档PDF文件创建另一个has_attached_file方法,然后为用户创建一个上传文件的视图。

It depends... 这取决于...

If you want to attach an image AND a document you need to create another paperclip attribute for the document. 如果要附加图像文档,则需要为文档创建另一个回形针属性。 On your model: 在你的模型上:

has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }
validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] }

has_attached_file :document
validates_attachment :document, :content_type => { :content_type => %w(application/pdf application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document) }

If you want to attach an image OR a document you can do the following: 如果要附加图像文档,可以执行以下操作:

has_attached_file :document
validates_attachment :document, :content_type => {:content_type => %w(image/jpeg image/jpg image/png application/pdf application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document)}

If you choose the first option you will need two file inputs on your view, with the second only one. 如果选择第一个选项,则视图中需要两个文件输入,第二个只有一个。 It's not right or wrong on this. 这不是对或错。 It depends what you want to do. 这取决于你想做什么。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM