Rails回形针没有显示图像

我是paperclip的新手,我想知道它是如何工作的。 我生成了一个简单的模型Monkey并获得了以下内容:

rails g scaffold monkey description age:datetime rails g paperclip monkey facepic rake db:migrate 

模型

 class Monkey { :medium => "300x300>", :thumb => "100x100>" } 

结束

查看新/编辑

  monkies_path, :html => { :multipart => true } do |f| %> ... 

查看节目

   

调节器

 @monkey = Monkey.new(monkey_params) 

我可以创建新的猴子,但是show视图似乎没有找到上传的文件。 我没有错误消息,除了’missing.png’的路由错误。 上传的图像没有任何痕迹。 我正在使用Rails 4.1.6。 我在这里想念的是什么? 我该如何解决这个问题? 安装了gem并安装了imagemagick。

这就是日志所说的:

 ActionController::RoutingError (No route matches [GET] "/facepics/original/missing.png"): ... Started GET "/monkies/new" for 127.0.0.1 at 2014-09-19 14:40:22 +0200 Processing by MonkiesController#new as HTML Rendered monkies/_form.html.erb (4.0ms) Rendered monkies/new.html.erb within layouts/application (5.0ms) Completed 500 Internal Server Error in 12ms ActionView::Template::Error (No route matches {:action=>"show", :controller=>"monkies"} missing required keys: [:id]): 

当我创建一个新的猴子时没有显示错误消息…:’(

编辑:

已创建Monkey模型,但回形针列保持为空。

此错误清楚地表明您的图像未被保存,因为您的has_attached_file块中未指定路径和URL。 应该是这样的:

 has_attached_file :facepic, :path => ":rails_root/public/system/:attachment/:id/:style/:filename", :url => "/system/:attachment/:id/:style/:filename", :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "path to default image" 

这里default_url显示你想要的图像,如果没有上传图像。 有关详细信息,请访问http://rdoc.info/gems/paperclip/4.2.0/Paperclip/ClassMethods%3ahas_attached_file 。

对于其他错误,您可以点击链接Paperclip :: Errors :: MissingRequiredValidatorError with Rails 4

Paperclip version 4.0 ,所有附件都需要包含content_typevalidationfile_namevalidation明确声明它们不会具有。

如果您不执行任何操作,Paperclip会引发Paperclip::Errors::MissingRequiredValidatorError错误。

在您的情况下, 指定has_attached_file :image 之后 ,您可以将以下任何行添加到Post模型中

选项1:validation内容类型

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

– 或 – 另一种方式

 validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] } 

– 还有另一种方式

是使用正则表达式来validation内容类型。

选项2:validation文件名

 validates_attachment_file_name :avatar, :matches => [/png\Z/, /jpe?g\Z/, /gif\Z/] 

选项3:不要validation

如果出于某些疯狂的原因(可能有效但我现在想不到一个),您不希望添加任何content_typevalidation并允许人们欺骗内容类型并接收您不希望进入服务器的数据然后添加以下:

 do_not_validate_attachment_file_type :image 

注意:

content_type / matches options中根据您的要求指定MIME类型。 我刚刚为您提供了一些图像MIME类型。

参考:

如果您仍需要validation ,请参阅Paperclip:Security Validations 。 🙂

有关详细信息,请转到此问题

我很遗憾地说我的问题最终是一堆事情:

  1. 不得不补充:facepic 强大的params
  2. 必须向模型添加内容类型的validation
  3. Paperclip具有依赖性… file -command,它不在Windows上提供。 可以在这里下载: http : //sourceforge.net/projects/gnuwin32/?source =typ_redirect

在三者之后,它就像一个魅力!

谢谢你们!