Rails 回形针使用自定义 ID 进行插值和before_save



在我的应用程序(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)

最新更新