在Paperclip中为缺少的图像指定默认URL

时间:2013-09-05 08:25:20

标签: ruby-on-rails paperclip

使用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是空白的,然后它返回默认图像网址,而不是显式指定默认图像网址。我应该改变什么?

2 个答案:

答案 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将返回默认网址。

你在案件中所做的事情对我来说似乎是正确的。