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