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 に答える