2

使用 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_urlin的目的photo.rb,因为我不知道在shop.photos(这是一组照片对象)为空白时显示默认图像的方法。

这与资产管道无关。这是关于如何检测到shop.photos空白,然后返回默认图像 url,而不是显式指定默认图像 url。我应该改变什么?

4

2 回答 2

2

在您的情况下 on Paperclip的目的:default_url是为photo对象设置默认网址。但是您在显示默认的“封面照片”时遇到了问题shop。这是代码中的附加逻辑。:default_url仅使用 Paperclip 的选项无法实现此目的。如果你想利用: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) %>

于 2013-09-05T09:13:27.403 回答
-1

实际上,当您有类似的关系时,默认 URL 将起作用

class User
has_attached_file :photo
end

当 user.photo 为 nil 时,默认 user.photo.url 将返回默认 URL。

你在你的情况下所做的对我来说似乎是正确的。

于 2013-09-05T09:16:06.920 回答