我正在使用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">
答案 0 :(得分:1)
我强烈建议您不保存用户生成内容进入资源文件夹!
如果您的网站进入生产模式,资产将被编译,并且您在运行时投入的所有内容都不会被捕获。 这样的东西属于 / public目录(!)
解决您的问题
:url => ":class/:attachment/:id/:basename_:style.:extension
你告诉回形针如何生成你的&#34; url&#34;。用&#34;路径&#34;您可以定义文件在内部存储的位置,使用url控制如何生成路径。你的死记硬背,没有任何道路。
但是再次 - 不要将这些图片保存到资产中!
btw:我想知道你的解决方案是否可以在生产模式中使用。 assetspipeline正在创建附加了摘要的文件,而paperclip对这些摘要一无所知,它将始终呈现没有摘要标记的路由。因此,您无法从资产管道调用图像。所以你的整个概念在生产中都没有用,但我可能错了