将我的模型的ID更改为UUID损坏的Paperclip文件路径

时间:2016-11-15 21:30:55

标签: ruby-on-rails amazon-web-services amazon-s3 paperclip

我有一个名为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的内部结构知之甚少,无法确定它们的来源。

1 个答案:

答案 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'