在我的应用程序(Rails 5.2(中,我的模型使用UUID类型的id。 我又创建了一个字段:id_server这将是我想与回形针一起使用的 id:id_partition 创建多个文件夹(默认id_partition适用于 id 字段,而不是另一个字段(。
我已经做到了:
before_save do
id_server = Photo.maximum(:id_server) + 1
end
以创建下一个id_server。
对于回形针:
# paperclip
has_attached_file :file, path: "/upload/:class/:attachment/:id_server_partition/:style/:basename.:extension",
styles: { :tiny => "140x140>", :small => "160x240", :high => "640x960" }
validates_attachment :file, content_type: { content_type: ['image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png'] }
validates_attachment :file, size: { in: 0..5.megabytes }
# create multiple folders path with id_server
Paperclip.interpolates :id_server_partition do |attachment, style|
attachment.instance.id_server_partition
end
def id_server_partition
("%09d".freeze % id_server).scan(/d{3}/).join("/".freeze)
end
事实是before_save((似乎从未在Paperclip.interpolates之前被调用过。
id_server在以下方面为零:
("%09d".freeze % id_server).scan(/d{3}/).join("/".freeze)
无法将 nil 转换为整数
我错过了什么?
奇怪的是,这是因为自我在:
before_save do
end
所以这有效,id_server在这里创建:
self.id_server = Photo.maximum(:id_server) + 1
但不是这个:
id_server = Photo.maximum(:id_server) + 1
但在这里,不需要id_server之前的自我:
("%09d".freeze % id_server).scan(/d{3}/).join("/".freeze)