我正在关注PaperClip的railscast并安装了ImageMagick。 我也关注他的视频和代码。上传的图像在一个视图中完美显示,但在另一个视图中缺失。我本质上是试图将相同的图像上传到两个页面而不是一个页面上。
当我检查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
任何人都知道什么是错的?
答案 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