我有一个带有回形针附件的模型。当我尝试使用另一个图像更新模型时,一切正常,除非新文件与旧文件具有相同的名称。
我猜回形针不明白这是一个新文件,即使文件名相同。
你有想法让它发挥作用吗?
我有一个带有回形针附件的模型。当我尝试使用另一个图像更新模型时,一切正常,除非新文件与旧文件具有相同的名称。
我猜回形针不明白这是一个新文件,即使文件名相同。
你有想法让它发挥作用吗?
接受的答案确实有效。然而; 我不喜欢它与特定领域的联系,实际上有很多地方我需要这个功能。在大多数情况下,以下问题应该有效(它假设您没有任何在其名称中使用 file_name 的非回形针列)。
module AttachmentUpdatable
extend ActiveSupport::Concern
included do
before_save :check_for_and_save_images
end
def check_for_and_save_images
return if self.new_record?
self.changed_attributes.each do |attr|
attr_name = attr[0].to_s
next unless attr_name.include?('file_name') # Yes, this is an assumption
image_col = attr_name.gsub('_file_name','')
self.send(image_col).save
end
end
end
我无法找到一个优雅的解决方案,但这是我如何让它工作的:
在你的模型上有一个 attr_accessor 布尔标志,当 true 调用 Paperclip 保存方法来强制更新。
class MyModel < ActiveRecord::Base
# paperclip attachment
has_attached_file :image, { ... }
attr_accessor :creative_uploaded
before_save :upload_new_creative_if_necessary
private
def upload_new_creative_if_necessary
if creative_uploaded
# force update of the creative
image.save
end
end
end
在我的控制器中,当一个文件出现一个帖子时,我设置了该标志:
@my_instance = MyModel.new( params[:my_model] )
@my_instance.creative_uploaded if params[:my_model][:image]
# ActiveRecord save/handle validations logic as normal