为什么Paperclip图像会像missing.png一样出现?

时间:2015-08-19 13:39:15

标签: ruby-on-rails paperclip

我知道在stackoverflow上有一些关于这方面的问题,但它们要么是我的头脑,要么与我自己的问题无关。

我正在研究jumpstartlab的Blogger 2项目教程,并在事先完成所有事情后达到了I4。该教程告诉我们安装paperclip gem,添加:

class AddPaperclipFieldsToArticle < ActiveRecord::Migration
  def change
    add_column :articles, :image_file_name, :string
    add_column :articles, :image_content_type, :string
    add_column :articles, :image_file_size, :integer
    add_column :articles, :image_updated_at, :datetime
  end
end

到新的迁移数据库,将paperclip字段添加到文章中(然后将其添加到此处)。

然后我添加了这段代码:

has_attached_file :image
validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png"]

到apps / models / article.rb,添加:image to app / helpers / articles_helper.rb

这是我的_form.html.erb

<%= form_for(@article, html: {multipart: true}) do |f| %>
<ul>
    <% @article.errors.full_messages.each do |error| %>
    <li><%= error %></li>
    <% end %>
</ul>
<p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
</p>
<p>
    <%= f.label :body %><br />
    <%= f.text_area :body %>
</p>
<p>
    <%= f.label :image, "Attach an Image" %><br />
    <%= f.file_field :image %>
</p>
<p>
    <%= f.submit %>
</p>
<p>
    <%= f.label :tag_list %><br />
    <%= f.text_field :tag_list %>
</p>
<% end %>

为什么我添加的图片总是变为missing.png?我尝试过多个图像,将Paperclip更改为旧版本,但输出始终相同。

提前致谢。

编辑:

查看show.html.erb的代码

<h1><%= @article.title %></h1>

<p><%= image_tag(@article.image.url) %></p>

<p><%= @article.body %></p>

<h3>Comments (<%= @article.comments.size %>)</h3>

<%= render partial: 'articles/comment', collection: @article.comments %>
<%= render partial: 'comments/form' %>

<%= link_to "<< Back to Articles' List", articles_path %>

<%= link_to "delete", article_path(@article), method: :delete, data: {confirm: "Really delete the article?"} %>

<%= link_to "edit", edit_article_path(@article) %>

<p>
    Tags:
    <% @article.tags.each do |tag| %>
    <%= link_to tag.name, tag_path(tag) %>
    <% end %>
</p>

articles_controller代码

class ArticlesController < ApplicationController
include ArticlesHelper
def index
    @articles = Article.all
end
def show
    @article = Article.find(params[:id])
    @comment = Comment.new
    @comment.article_id = @article.id
end
def new
    @article = Article.new
end
def create
    @article = Article.new(article_params)
    @article.save

    flash.notice = "Article '#{@article.title}' Created!"

    redirect_to article_path(@article)
end
def destroy
    @article = Article.find(params[:id])
    @article.destroy

    flash.notice = "Article '#{@article.title}' Deleted!"

    redirect_to action: 'index'
end
def edit
    @article = Article.find(params[:id])
end
def update
    @article = Article.find(params[:id])
    @article.update(article_params)

    flash.notice = "Article '#{@article.title}' Updated!"

    redirect_to article_path(@article)
end
end

1 个答案:

答案 0 :(得分:1)

Why are Paperclip images coming up as missing.png?

这字面上描述了这个问题。当文章:imagenil时,无论您尝试什么,它都会显示此默认missing.png,因为此案例由Paperclip本身处理。

但是,您可以使用default_url选项在文章图像缺失时设置自定义默认图像。

或者,你可以使用这样的条件:

if @article.image_file_name.present?
  # this makes sure the article has an image
  # show the article image
else
  # show the custom default image here
end

更新

基本上,您的图片上传无效。确保你的控制器中有这个:

def article_params
  params.require(:article).permit(:image)
end

我怀疑,在您创建文章时存在一些验证错误。要确保将create方法更改为:

def create
    @article = Article.create!(article_params)

    flash.notice = "Article '#{@article.title}' Created!"

    redirect_to article_path(@article)
end 

如果在创建文章时出现任何错误,则使用create!代替new会抛出异常,您将能够知道确切的问题。

试试这个让我知道!如果在创建文章时使用create!时出现任何错误,请使用这些信息更新您的问题。我几乎可以肯定您将获得图像内容类型验证错误。如果是这种情况,那么我们将为您的图像和content_type添加自定义验证,并确保它有效。但是,我们会看到!