使用Rails 3.2和Paperclip 3.4.2。我有以下内容:
# photo.rb
has_attached_file :data,
:styles => {
:picture_lightbox => ["600x450>", :jpg],
:picture_preview => ["250x250^", :jpg],
:picture_thumb => ["76x76^", :jpg]
},
:default_url => "placeholder_:style.png"
# shop.rb
has_many :photos
# show.html.erb
<% if !shop.photos.blank? %>
<%= image_tag(shop.photos[0].data.url(:picture_thumb)) %>
<% else %>
<%= image_tag('placeholder_picture_thumb.png') %>
<% end %>
虽然这样可行,但它在:default_url
中指定photo.rb
的目的却失败了,因为我不知道在shop.photos
(这是一个数组)时显示默认图像的方法照片对象)是空白的。
这与资产管道无关。这是关于如何检测shop.photos
是空白的,然后它返回默认图像网址,而不是显式指定默认图像网址。我应该改变什么?
答案 0 :(得分:2)
在您的情况下,在Paperclip上:default_url
的目的是为photo
对象设置默认网址。但是显示shop
的默认“封面照片”时出现问题。这是代码中的附加逻辑。仅使用Paperclip的:default_url
选项无法实现此目的。如果您想利用:default_url
选项,我建议您在shop.rb
中创建一个类似于以下内容的方法:
def cover_url
# I guess you want to use first photo based on your code
photos.first_or_initialize.data.url(:picture_thumb)
end
然后在您的视图中,您将只有<%= image_tag(shop.cover_url) %>
答案 1 :(得分:-1)
实际上,当你有像
这样的关系时,默认的URL就可以了class User
has_attached_file :photo
end
当user.photo为nil时,默认user.photo.url将返回默认网址。
你在案件中所做的事情对我来说似乎是正确的。