4

这是我的模型

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 此处实际图像文件名未更新但路径已更新。所以找不到图。

4

1 回答 1

0

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

这段代码完全未经测试,但应该给你一个想法:

before_save do
  if self.name_changed?
     self.logo = logo.uploaded_file
  end
end
于 2013-05-27T23:32:44.947 回答