更新任何属性后,Paperclip图像名称已更改

时间:2013-05-27 09:39:49

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

这是我的模特

class Technology < ActiveRecord::Base
  attr_accessible :name #etc ....
    has_attached_file :logo, :path => ":rails_root/public/technologies/logos/:normalized_input_file_name"

  Paperclip.interpolates :normalized_input_file_name do |attachment, style|
      attachment.instance.normalized_input_file_name
  end

  def normalized_input_file_name
      name = "#{self.name}".downcase
      "#{self.tuid}_"+name.gsub(/[^a-zA-Z0-9]{2,}/,' ').strip.gsub(/\W/,'_').gsub(/\A_/,'').gsub(/_\z/,'')+"_150x"+".png"
  end
end

当我创建任何技术时,我使用方法“normalized_input_file_name”为我上传一个徽标,并使用新名称存储在公共目录中。 例如,技术名称为HTML5,文件名称为id_html5_150x.png 但是当我需要更新名称时,图像路径也发生了变化。 例如HTML 5文件名变为id_html_5_150x.png此处不更新实际图像文件名 但路径已更新。所以我找不到图像。

1 个答案:

答案 0 :(得分:0)

如果您发现before_save属性会发生变化,请使用name挂钩再次下载并存储图像。

此代码完全未经测试但应该给您一个想法:

before_save do
  if self.name_changed?
     self.logo = logo.uploaded_file
  end
end