在Rails中使用CarrierWave上传多个Filles

时间:2015-09-05 22:06:57

标签: ruby-on-rails ruby file-upload carrierwave multiple-file-upload

我正在尝试使用Carrierwave上传多个文件。我尝试添加多文件功能,如Carrierwave的github页面所示,但老实说这是最糟糕的事情。我找到了一个很好的来源,可以通过以下步骤上传多个文件。

1)rails new multiple_image_upload_carrierwave

2)

rails g scaffold post_attachment post_id:integer type_id:integer avatar:string

rake db:migrate

3)在post.rb

class Post < ActiveRecord::Base
   has_many :post_attachments
   accepts_nested_attributes_for :post_attachments
end

4)在post_attachments.rb

class PostAttachment < ActiveRecord::Base
   mount_uploader :avatar, AvatarUploader
   belongs_to :post
end

5)在post_controller.rb

def show
   @post_attachments = @post.post_attachments.all
end

def new
   @post = Post.new
   @post_attachment = @post.post_attachments.build
end

def create


     @post = Post.new(post_params)

       respond_to do |format|
         if @post.save
           params[:post_attachments]['avatar'].each do |a|
              @post_attachment = @post.post_attachments.create!(:avatar => a, :post_id => @post.id)
           end
           format.html { redirect_to @post, notice: 'Post was successfully created.' }
         else
           format.html { render action: 'new' }
         end
       end
     end

     def update
       respond_to do |format|
         if @post.update(post_params)
           params[:post_attachments]['avatar'].each do |a|
             @post_attachment = @post.post_attachments.create!(:avatar => a, :post_id => @post.id)
           end
         end
      end

      def destroy
        @post.destroy
        respond_to do |format|
          format.html { redirect_to @post }
          format.json { head :no_content }
        end
      end


     private
       def post_params
          params.require(:post).permit(:title, post_attachments_attributes: [:id, :post_id, :avatar])
       end

我的问题是,安装在头像字段中并上传的每个文件(.pdf)在.pdf扩展之前都有一个唯一的后缀标识符。例如XCF.pdf和BJHA.pdf。我有一个类型表,其中一列被称为“后缀”。之前,当我只有一个文件上传时,它会检查create方法,看看文件名扩展名的第一部分(在.pdf之前)是否存在于后缀列下的types表中,如果是的话,它是将该type_id分配给该帖子文件。如果没有找到后缀,则会出现验证错误。但现在我有多个文件上传,我有一个额外的表名为post_attachments表,我不知道我应该在哪里执行此步骤来填充每个文件的type_id,因为每个文件都有自己的type_id。应该在create方法的post_atachment_controller.rb中完成吗?

我想在post_controler.rb中的if @ post.save之后可能在create函数中

    if @post.save
      params[:post_attachments]['avatar'].each do |a|
        @type = Type.where("sufix LIKE a.tr(.pdf,"")")
      if @type.exits?
        @post_attachment = @post.post_attachments.create!(:avatar => a, :post_id => @post.id, :type_id => @type.id)
      end

0 个答案:

没有答案