Скрепка загружает изображение на одной странице, но не отображается на другой."Missing.png" - PullRequest
0 голосов
/ 19 сентября 2011

Я слежу за Railscast для PaperClip и установил ImageMagick. Я также следил за его видео и кодом. Загруженное изображение отлично отображается в одном виде, но отсутствует в другом. По сути, я пытаюсь загрузить одно и то же изображение для отображения на обеих страницах вместо одной.

enter image description here

При проверке элемента изображения в Chrome я получаю следующее:

<img alt="Missing" src="/photos/medium/missing.png?1316405973">

Вот моя форма:

<%= form_for @micropost, :html => { :multipart => true } do |f| %>
  <%= render 'shared/error_messages', :object => f.object %>
  <div class="field">
    <%= f.text_area :content %>
  </div>
  <div class="actions">
    <%= f.submit "Submit" %>
  </div>
  <div class="photo">
  <%= f.file_field :photo %>
  </div>
<% end %>

Вот моя модель "микросообщений", так как я следую учебнику по рельсам

    class Micropost < ActiveRecord::Base
      attr_accessible :content, :photo, :photo_file_name, :photo_content_type,  :photo_file_size, :photo_updated_at

      belongs_to :user
      has_attached_file :photo,
            :url  => "/assets/products/:id/:style/:basename.:extension",
            :path => ":rails_root/public/assets/products/:id/:style/:basename.:extension"

    validates_attachment_presence :photo
    validates_attachment_size :photo, :less_than => 5.megabytes
    validates_attachment_content_type :photo, :content_type => ['image/jpeg', 'image/png'
end

А вот мой файл _micropost.html.erb с тегом image_tag в строке 4.

**** Обратите внимание, что я удалил переменную @ instance перед словом micropost. Это не соответствует примеру, потому что я получаю сообщение No Method Error: undefined метод `photo 'для nil: NilClass, когда я превращаю его в переменную экземпляра. После удаления я могу получить изображение для отображения. **

        <tr>
      <td class="micropost">
        <span class="content"><%= micropost.content %></span>
        <%= image_tag micropost.photo.url(:medium) %>   #### This is the code added ########
        <span class="timestamp">
   ....
....
...
      </td>
      <% end %>
    </tr>

Однако на странице канала я использую переменную экземпляра @micropost, в противном случае я получаю NameError в Pages # home, неопределенную локальную переменную или метод `micropost 'для Class. Если сделать его переменной экземпляра, то, по крайней мере, что-то отобразится на странице. Это вид с отсутствующим изображением. feed_item.html.erb

   <tr>
      <td class="gravatar">
  ...
  ...
        </span>
        <span class="content"><%= feed_item.content %></span>
            <%= image_tag @micropost.photo.url(:medium) %>    #### inserted code##
        <span class="timestamp">
          Posted <%= time_ago_in_words(feed_item.created_at) %> ago.
  ....
....
      <% end %>
    </tr>

**** РЕДАКТИРОВАТЬ **

Вот мой код контроллера:

class MicropostsController < ApplicationController
 before_filter :authenticate, :only => [:create, :destroy]
  before_filter :authorized_user, :only => :destroy


   def create
    @micropost = current_user.microposts.build(params[:micropost])
    if @micropost.save
      flash[:success] = "Blurb posted!"
      redirect_to root_path 
    else
      @feed_items = []
      render 'pages/home'
    end
  end

Кто-нибудь знает, что не так?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Вам необходимо установить отсутствующее изображение на /photos/medium/missing.png Если вы хотите, чтобы один отображал

0 голосов
/ 09 марта 2014

у меня это работает: (user.rb)

has_attached_file :avatar, :styles => { :small => "52x52",
:medium => "200x200>", :large=> "300x300", :thumb => "100x100>" },
                              :default_url => "missing_:style.png"

просто поместите изображения в папку ваших ресурсов / изображений с именем: missing_large.png, missing_medium.png, missing_small.png и missing_thumb.png

...