Paperclip在一个页面上加载图像,但不在另一个页面上显示。 “Missing.png”

时间:2011-09-19 05:54:07

标签: ruby-on-rails paperclip

我正在关注PaperClip的railscast并安装了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文件,第4行有image_tag。

****请注意,我在单词micropost之前删除了@ instance变量。这不是遵循这个例子,因为我得到一个No Method Error:nil的未定义方法`photo':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>

但是,在feed页面上,我确实使用了@micropost实例变量,否则我在Pages#home,undefined local variable或者方法`micropost'中获得了一个NameError。使它成为一个实例变量至少会在页面上显示一些内容。这是缺少图像的视图。 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 个答案:

答案 0 :(得分:2)

您需要在/photos/medium/missing.png设置缺失的图片 如果你想要一个显示

答案 1 :(得分:0)

这对我有用:(user.rb)

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

只需将图片放在您的assets / images文件夹中,名为:missing_large.png,missing_medium.png,missing_small.png和missing_thumb.png