Ruby on rails 保存后重命名Spree::Image

Ruby on rails 保存后重命名Spree::Image,ruby-on-rails,spree,Ruby On Rails,Spree,图像文件应重命名为[variant name]-[barrelated option type].jpg,用于变体。我已经走了这么远 更新代码 Spree::Image.class_eval do after_save :change_file_name private def change_file_name if self.viewable.kind_of? Spree::Variant product_name = self.viewable.produc

图像文件应重命名为
[variant name]-[barrelated option type].jpg
,用于变体。我已经走了这么远

更新代码

Spree::Image.class_eval do

 after_save :change_file_name

 private

  def change_file_name
    if self.viewable.kind_of? Spree::Variant
      product_name = self.viewable.product.name.downcase.gsub(" ","_")
      underscored_option_types = get_underscored_option_types
      random_number = rand(10000...1000000)
      extension = File.extname(self.attachment_file_name).downcase
      attachment_file_name = product_name+"-"+underscored_option_types+"-"+"#{random_number}"+"#{extension}"
      self.update_column(:attachment_file_name, attachment_file_name)
    end
  end

end

此代码仅重命名
attachment\u file\u name
列。如何更改图像的名称?即使是
self.save
也不起作用,因为我逃避了递归循环。

我不得不在各自的位置重命名文件,因为存储的图像样式(版本)不同。您必须在各自的位置重命名图像的每个版本。我希望以下代码能帮助某人。干杯:)

Spree::Image.class_eval do

 after_save :change_file_name

 private

  def change_file_name
    @skip_change_file_name ||= false
    return if @skip_change_file_name
    if self.viewable.kind_of? Spree::Variant
      product_name = self.viewable.product.name.downcase.gsub(" ","_")
      underscored_option_types = get_underscored_option_types
      random_number = rand(10000...1000000)
      extension = File.extname(self.attachment_file_name).downcase
      new_file_name = product_name+"-"+underscored_option_types+"-"+"#{random_number}"+"#{extension}"
      (self.attachment.styles.keys+[:original]).each do |style|
        FileUtils.move(self.attachment.path(style), File.join(File.dirname(self.attachment.path(style)), new_file_name))
      end
    self.attachment_file_name = new_file_name
    @skip_change_file_name = true
    self.save!
    end
  end

end