【问题标题】:Why aren't files being updated? (Rails4)为什么不更新文件? (Rails4)
【发布时间】:2014-03-22 00:50:21
【问题描述】:

我正在使用best_in_place 来更新我使用paperclip 创建的照片的名称。数据库中的文件名正在更新,但实际存储的文件 (/public/system/photos/attachments/...) 并未更新以反映更改后的名称。

结果是应用寻找不存在的新文件名:

没有路线匹配 [GET] "/system/photos/attachments/000/000/011/original/new_file_name.jpg"

照片控制器:

def update
    @photo = Photo.find(params[:id])
    respond_to do |format|
      if @photo.update_attributes(photo_params)
        format.html { redirect_to(new_photo_path, :notice => 'Photo was successfully updated.') }
        format.json { respond_with_bip(@photo) }
      else
        format.html { render :action => "edit" }
        format.json { respond_with_bip(@photo) }
      end
    end
  end

照片(新)视图:

 <% @photos.each do |photo| %>
   <%= best_in_place photo, :attachment_file_name, :type => :input %>
 <% end %>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 paperclip best-in-place


    【解决方案1】:

    best_in_place 为您提供为附件命名的机制,而Paperclip 用于上传new attachmentreplacing with 新附件。在您的update 操作中,您传递了一个新的attachment_file_name,它只会更新数据库中附件的文件名,而不是物理文件名。 为此,您必须使用 File.rename 实用程序重命名文件。

    例如:

     def update
        @photo = Photo.find(params[:id])
        original_file_path = @photo.attachment.path
        folder_path = original_file_path.gsub(@photo.attachment_file_name,"")
    
        respond_to do |format|
          if @photo.update_attributes(photo_params)
            unless @photo.attachment.path == original_file_path
              File.rename(original_file_path, folder_path + @photo.attachment_file_name )
            end
            format.html { redirect_to(new_photo_path, :notice => 'Photo was successfully updated.') }
            format.json { respond_with_bip(@photo) }
          else
            format.html { render :action => "edit" }
            format.json { respond_with_bip(@photo) }
          end
        end
      end
    

    希望这能解决您的问题。

    【讨论】:

    • 几乎.. 我尝试了您的代码,但我认为它在 File.rename 之后缺少结尾。我试图编辑您的答案,但我不能,因为它少于六个字符。也许你可以试试?然后我可以将您的问题标记为已接受。
    • @Sheldon end 不会丢失 unless。我已对齐代码,以便您可以匹配块。
    猜你喜欢
    • 1970-01-01
    • 2013-03-15
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 2014-01-22
    • 2013-09-10
    相关资源
    最近更新 更多