我有一个名为SpacePhoto的模型。 SpacePhoto has_attached_file :photo
通过Paperclip。
SpacePhoto曾经有一个整数ID,但我最近将其更改为UUID,并进行了以下迁移:
class ChangePhotoPrimaryKeyType < ActiveRecord::Migration
def change
add_column :space_photos, :uuid, :uuid, default: "uuid_generate_v4()", null: false
change_table :space_photos do |t|
t.remove :id
t.rename :uuid, :id
end
execute "ALTER TABLE space_photos ADD PRIMARY KEY (id);"
end
end
要获取网址,我会space_photo.photo.url
,但现在不再给我正确的网址了。例如,在运行该迁移之前,我会获取网址https://s3-us-west-2.amazonaws.com/instally.beta/space_photos/photos/000/000/071/original/avatar.jpg?1478889772。现在,我得到https://s3-us-west-2.amazonaws.com/instally.beta/space_photos/photos/086/a71/a9-/original/avatar.jpg?1479167261
不同之处在于URL中间有3组3个字符,但我对Paperclip的内部结构知之甚少,无法确定它们的来源。
答案 0 :(得分:1)
您遇到的问题是使用:id_partition
插值的附件的Paperclip网址的结果,该插值会将id
拆分为前3个字符的3个字符拆分路径形式。
我怀疑这是因为您没有提供网址选项而且Paperclip使用默认值:
/system/:class/:attachment/:id_partition/:style/:filename
要覆盖此选项,您需要指定url
选项,并将:id_partition
替换为:id
插值。在具有附件的模型中,将has_attached_file
声明更改为:
has_attached_file :photo,
url: '/system/:class/:attachment/:id/:style/:filename'