gpt4 book ai didi

ruby-on-rails-3 - Rails 3 + 回形针 : moving current data to another folder

转载 作者:行者123 更新时间:2023-12-04 07:01:35 25 4
gpt4 key购买 nike

由于我是 Rails 的新手,我犯了在 4 个不同模型中使用默认路径 (/system/:attachment/:id/:style/:filename ) 的错误。现在,我想将每个模型移动到其自己的文件夹中,但又不会丢失旧数据。

处理这个问题的正确方法是什么? Paperclip 是否提供自动从旧文件夹迁移数据的选项?

谢谢。

最佳答案

我也有过类似的困境。我们将所有附件存储在特定路径中,然后业务需求发生变化,所有内容都必须移动和重新组织。

令我惊讶的是,关于更改回形针路径和移动文件的信息如此之少。也许我错过了显而易见的东西?

Fernando我不得不写一个 rake 任务。这是我的代码的样子(附件模型是 Attachment,实际的 Paperclip::Attachment 对象是 :file )

task :move_attachments_to_institution_folders => :environment do
attachments = Attachment.all
puts "== FOUND #{attachments.size} ATTACHMENTS =="
old_path_interpolation = APP_CONFIG[ 'paperclip_attachment_root' ] + "/:id_partition.:extension"
new_path_interpolation = APP_CONFIG[ 'paperclip_attachment_root' ] + "/:institution/reports/:id_:filename"
attachments.each do |attachment|
# the interpolate method of paperclip takes the symbol variables and evaluates them to proper path segments.
old_file_path = Paperclip::Interpolations.interpolate(old_path_interpolation, attachment.file, attachment.file.default_style) #see paperclip docs
puts "== Current file path: #{old_file_path}"
new_file_path = Paperclip::Interpolations.interpolate(new_path_interpolation, attachment.file, attachment.file.default_style)
if File.exists?(old_file_path)
if !File.exists?(new_file_path) #don't overwrite
FileUtils.mkdir_p(File.dirname(new_file_path)) #create folder if it doesn't exist
FileUtils.cp(old_file_path, new_file_path)
puts "==== File copied (^_^)"
else
puts "==== File already exists in new location."
end
else
puts "==== ! Real File Not Found ! "
end
end

对我来说关键是让回形针使用其默认插值重新计算旧路径。从那时起,只需使用标准的 FileUtils 将文件复制过来即可。该副本负责重命名。

附言我在 rails 2.3.8 分支上,使用 paperclip -v 2.8.0

关于ruby-on-rails-3 - Rails 3 + 回形针 : moving current data to another folder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com