在我的应用程序(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
事实是,在Paperclip.interpolates之前似乎从未调用过before_save()。
id_server为零:
("%09d".freeze % id_server).scan(/\d{3}/).join("/".freeze)
无法将nil转换为Integer
我想念什么?
答案 0 :(得分:0)
奇怪的是,这是因为自我不在:
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)