在RoR中设置静态上载路径

时间:2017-08-24 09:04:39

标签: ruby-on-rails ruby

问题

我在videos_controller.rb中有这两个功能,用于在RoR中创建和更新视频

# POST /videos
# POST /videos.json
def create
@video = Video.new(video_params)

respond_to do |format|
  if @video.save
    format.html { redirect_to @video, notice: 'Video successfully created.' }
    format.json { render :show, status: :created, location: @video }
  else
    format.html { render :new }
    format.json { render json: @video.errors, status: :unprocessable_entity }
  end
end
end

# PATCH/PUT /videos/1
# PATCH/PUT /videos/1.json
def update
respond_to do |format|
  if @video.update(video_params)
    format.html { redirect_to @video, notice: 'Video successfully updated.' }
    format.json { render :show, status: :ok, location: @video }
  else
    format.html { render :edit }
    format.json { render json: @video.errors, status: :unprocessable_entity }
  end
end
end

private
  # Use callbacks to share common setup or constraints between actions.
  def set_video
    @video = Video.find(params[:id])
  end

  # Never trust parameters from the scary internet, only allow the white list through.
  def video_params
    params.require(:video).permit(:title, :file)
  end
end

问题是无论何时上传,它都会在路径中创建一个新文件夹,即uploads / video / file / {id} / filename。

要求 我希望路径是静态的,因为只有一个视频,所以我希望视频名称和路径保持相同,即使它被更新,即新文件(如果编辑)由旧文件名放置或保存在旧文件路径。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

如果您使用carrierwave uploader,则可以从store_dir更改uploaders/video_uploader.rb方法

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{model.id}"
end

但我不太明白,为什么默认行为会打扰你。