Rails image_tag自动前缀" / images"在@ user.avatar.url之前而不是" / assets"在回形针中

时间:2015-08-14 09:55:24

标签: ruby-on-rails paperclip asset-pipeline

我正在使用paperclip上传用户头像。 这是用户模型:

has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "user.png", :path => "app/assets/images/:class/:attachment/:id/:basename_:style.:extension", :url => ":class/:attachment/:id/:basename_:style.:extension"

因此,图片保存在 app / assets / images / user / avatar /:id /:basename_:style。:extension

但是当我做的时候

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

显示为:

<img src="/images/users/avatars/15/99e88dc27c19d8c6163d9cd305f738be_original.jpg" alt="99e88dc27c19d8c6163d9cd305f738be original">

即。 insert&#34; / images&#34;而不是&#34; / assets&#34;

我仔细检查过, assets / images / user / avatar / 文件夹中存在头像图片

虽然页面中的所有其他图片都使用资源管道正确显示&#34; /assets/logo-thebighashgohere.png"

注意:如果我手动将图片网址作为字符串插入,这可以正常工作 即:

<%= image_tag "users/avatars/15/99e88dc27c19d8c6163d9cd305f738be_original.jpg" %>

它正确显示为

<img src="/assets/users/avatars/15/99e88dc27c19d8c6163d9cd305f738be_original-thebighashgohere.jpg" alt="99e88dc27c19d8c6163d9cd305f738be original thebighashgohere">

1 个答案:

答案 0 :(得分:1)

我强烈建议您不保存用户生成内容进入资源文件夹!

如果您的网站进入生产模式,资产将被编译,并且您在运行时投入的所有内容都不会被捕获。 这样的东西属于 / public目录(!)

解决您的问题

 :url => ":class/:attachment/:id/:basename_:style.:extension

你告诉回形针如何生成你的&#34; url&#34;。用&#34;路径&#34;您可以定义文件在内部存储的位置,使用url控制如何生成路径。你的死记硬背,没有任何道路。

但是再次 - 不要将这些图片保存到资产中!

btw:我想知道你的解决方案是否可以在生产模式中使用。 assetspipeline正在创建附加了摘要的文件,而paperclip对这些摘要一无所知,它将始终呈现没有摘要标记的路由。因此,您无法从资产管道调用图像。所以你的整个概念在生产中都没有用,但我可能错了