使用CarrierWave更新多个文件上传

时间:2015-11-29 00:51:07

标签: ruby ruby-on-rails-4 carrierwave

我已经在我的模型中实现了“多文件上传”,就像CarrierWave的文档中所解释的那样,它的工作正常。我的问题是我无法让模型更新起作用。当我尝试添加新文件时,它会删除旧文件。我想保留两者。这是我的模型和控制器的一部分:

class Album < ActiveRecord::Base
  mount_uploaders :photos, PhotosUploader
end

class AlbumController < ApplicationController
  def create
    @album = Album.new(album_params)
    if @album.save
      flash[:success] = 'Album created'
      redirect_to @album
    else
      render 'new'
    end
  end

  def update
    @album = Album.find(params[:id])
    if @album.update_attributes(album_params)
      flash[:success] = 'Album created'
      redirect_to @album
    else
      render 'edit'
    end
  end

  private

    def album_params
      params.require(:album).permit({ photos: [] })
    end
end

我考虑过将照片放在不同的模型中,但如果我能以这种方式工作则会更好。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我在我的更新方法中有以下内容,以确保CarrierWave上传的现有图像(头像)保持不变。我有一个单独的方法,允许用户单独删除图像。

 def update
    project_params_holder = project_params
    project_params_holder[:avatars] += @project.avatars if project_params_holder[:avatars]

    respond_to do |format|
      if @project.update(project_params_holder)
        format.html { redirect_to @project, notice: 'Project was successfully updated.' }
        format.json { render :show, status: :ok, location: @project }
      else
        format.html { render :edit }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end