如果我上传新文件,如何询问Paperclip?

时间:2014-04-03 05:33:18

标签: ruby-on-rails ruby-on-rails-3 paperclip

我想在第一次上传图片时对其进行处理。可以在不更新图像的情况下更新模型,我希望避免在这些情况下进行额外处理。如果图像是 new ,如何替换,我该怎么写支票才能处理图像?

类似的东西:

def update
  @model = Model.find(params[:id])
  @model.process_image if @model.image_is_different_from_existing?
  ...
end

2 个答案:

答案 0 :(得分:0)

如果您要上传的照片具有唯一名称,那么可以采用一种方式,让我们说回形针属性名称为image,回形针创建一个名为image_file_name的列,然后再保存可以检查数据库中存在的图像文件名是否与要上载的图像文件的名称匹配。我已经实现了类似的功能,下面是代码段

product_images = product.product_attachments.pluck(:photo_file_name)

unless product_images.include?("name_of_the_image_i_am_uploading")
  product.product_attachments.create!(:photo => File.open("/home/rajdeepb/Photo/#{data_array[1]}")) if all_images.include?("/home/rajdeepb/Photo/#{name_of_the_image_i_am_uploading}")
end

这可能不是完美的解决方案,但它可能对您有所帮助

答案 1 :(得分:0)

我已经编写了一个解决方案,可以在updatecreate方法中查找相关的参数。

这样的事情:

<强> user.rb

def attachments
  %w(banner footer logo)
end

<强> users_controller.rb

def new_resources?
  attaching = []
  @user.attachments.each do |a|
    attaching << a if params[:user][a].present?
  end
  return true unless attaching.empty?
end

def attaching
  []
end

def update
  ...
  if @user.request_necessary? && new_resources?
    action_response << "Server updated: new #{attaching} uploaded."
    redirect_to users_path, notice: action_response.join(' ')