Указание пропущенного.png в Скрепке - PullRequest
7 голосов
/ 15 сентября 2011

Я использую 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

Я добавил эти папки в свое приложение и поместил туда отсутствующий файл .png и ничего.Если перейти по указанному выше URL, я получу No route matches "/photos/normal/missing.png"

У кого-нибудь есть идеи относительно того, что происходит?

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

Это HTML-код, который отображается при наличии :photo:

<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>

Это HTML-код, который отображается, когда :photo равен нулю:

<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 ]

15 голосов
/ 27 марта 2012

Я думаю, вы хотите метод exists?.

if @profile.photo.exists?

@profile.photo.nil? всегда будет false, потому что оно возвращает изображение по умолчанию, если оно отсутствует.


ПРИМЕЧАНИЕ : проверяет, существует ли действительно файл, и может быть очень медленным, если вы размещаете свои изображения в CDN.

В качестве обходного пути вы можете просто проверить, считает ли база данных файл:

if @profile.photo_file_name.present?
12 голосов
/ 15 сентября 2011

Проверьте параметр :default_url в rdocs , поэтому он отображается как есть.Скрепка обрабатывает случаи, когда нет прикрепленного файла.

Вы можете установить по умолчанию что-то другое и избежать дополнительной работы в вашем шаблоне.

...