我知道在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
答案 0 :(得分:1)
Why are Paperclip images coming up as missing.png?
这字面上描述了这个问题。当文章:image
为nil
时,无论您尝试什么,它都会显示此默认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添加自定义验证,并确保它有效。但是,我们会看到!