Имя изображения скрепки изменено после обновления любого атрибута

Это моя модель

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 ответ

Используйте before_save hook для загрузки и сохранения изображения снова, если вы узнаете, что атрибут name изменится.

Этот код полностью не протестирован, но должен дать вам представление:

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

licensed under cc by-sa 3.0 with attribution.