Paperclip:url不会创建路由

使用带回形针的:url选项有什么意义? :path选项实际上确实改变了保存文件的位置,但是:url选项似乎没有做任何事情。 它仅在指向可公开访问的文件位置时才有效。 此时,任何人都可以访问该url。 如果我更改URL以使其与路径不匹配,则它不起作用。 据我所知,它不会创建任何路线。 这里有什么我想念的东西。 这个选项有什么意义? 让某人指定:url而不实际创建路线似乎过于混乱。

我发现这篇文章有助于理解:path:url之间的区别。

  • :path设置应用程序中存储文件的目录。
  • :url设置用户可用于访问图像的URL。

你是对的,paperclip不会为你创建一条路线。 但是, :url选项确实使您能够选择用户可用于下载特定图像的(现有)路线。

:path:url通常是齐头并进的。 如果您坚持使用回形针:default_url已经为您配置了路径。 只需点击url,一切都会正常工作。

更改文件位置

在这个例子中,我正在呈现一个用户头像:

 <%= image_tag @user.avatar.url %> 

现在,假设您想要更改存储图像的位置,您可以将以下代码添加到模型中:

  has_attached_file :avatar, :path => "public/system/:class/:id/:filename" 

但是,图像无法成功渲染。 这是因为存储图像的新路径与:default_url不匹配。 因此,您还需要指定一个新url:

  has_attached_file :avatar, :path => "public/system/:class/:id/:filename" :url => "/system/:class/:id/:basename.:extension" 

现在,图像url与文件存储在服务器上的位置相匹配,图像呈现成功。

路径与URL

总结一下, :url告诉paperclip在服务器上寻找图像的位置。 :path在创建或更新记录时告诉paperclip上传图像的位置。

两者:path:url应指向同一位置,以便成功呈现图像。