在Paperclip中指定missing.png

时间:2011-09-15 01:42:27

标签: ruby-on-rails-3 paperclip

我正在使用Paperclip在我的应用中处理个人资料照片上传。他们上传得很好,并调整到我的模型中的规格。但是,如果用户的个人资料:照片为零,无论我尝试什么,我都无法更改默认值。这是我想要使用的代码:

<% if @profile.photo.nil? %>
<%= image_tag "public/images/example.jpg", :html => { :id => "noUserProfile" } %>
<% else %>
<%= image_tag @profile.photo.url(:normal) %>
<% end %>

我已经尝试了“../public/images/example.jpg”,即使我的公共图片文件夹中有“example.jpg”也不行。当我在视图中复制图像地址时,我得到:

http://localhost:3000/photos/normal/missing.png

我将这些文件夹添加到我的应用程序中,并在其中放置了missing.png文件,没有任何内容。如果我转到上面的网址,我会收到No route matches "/photos/normal/missing.png"

有没有人对于发生了什么有任何想法?

Profile模型中的

has_attached_file

has_attached_file :photo,
  :styles => {
  :normal => "153x220#",
  :small => "75x108#" }

add_attachment_photo_to_profile 迁移:

class AddAttachmentPhotoToProfile < ActiveRecord::Migration
  def self.up
    add_column :profiles, :photo_file_name, :string
    add_column :profiles, :photo_content_type, :string
    add_column :profiles, :photo_file_size, :integer
    add_column :profiles, :photo_updated_at, :datetime
  end

  def self.down
    remove_column :profiles, :photo_file_name
    remove_column :profiles, :photo_content_type
    remove_column :profiles, :photo_file_size
    remove_column :profiles, :photo_updated_at
  end
end

这是:photo存在时呈现的HTML:

<div class="userSnapshot">
  <div class="smFrame">
    <div class="smUserPhoto">
      <img alt="8217_667699353137_15600054_38423586_7789442_n" src="/system/photos/1/small/8217_667699353137_15600054_38423586_7789442_n.jpg?1316052048" />
    </div>
  </div>
  <div class="findinfo">
    <p><a href="/profiles/1">Name</a></p>
  </div>
</div>

这是:photo为零时呈现的HTML:

<div class="userSnapshot">
  <div class="smFrame">
    <div class="smUserPhoto">
      <img alt="Missing" src="/photos/small/missing.png" />
    </div>
  </div>
  <div class="findinfo">
    <p><a href="/profiles/2">Name</a></p>
  </div>
</div>

2 个答案:

答案 0 :(得分:15)

我认为您需要exists?方法。

if @profile.photo.exists?

@profile.photo.nil?始终为false,因为它会在缺失时返回默认图片。


注意:这会检查真实文件是否存在,如果您将图像托管在CDN上,则可能会非常慢。

作为一种解决方法,您可以只检查数据库是否认为存在文件:

if @profile.photo_file_name.present?

答案 1 :(得分:12)

查看rdocs中的:default_url选项,这就是它原样渲染的原因。当没有附加文件时,Paperclip会处理这些情况。

您可以将默认值设置为不同的值,并避免模板中的额外工作。