Ruby on rails 回形针异常:回形针::AdapterRegistry::NoHandlerError
使用rails 3.2.2中的回形针3.0.1,我遇到了以下错误:Ruby on rails 回形针异常:回形针::AdapterRegistry::NoHandlerError,ruby-on-rails,paperclip,Ruby On Rails,Paperclip,使用rails 3.2.2中的回形针3.0.1,我遇到了以下错误: **Paperclip::AdapterRegistry::NoHandlerError** (No handler found for "2009-11-29-133527.jpg"): 在我的模型中,我有: class Product < ActiveRecord::Base ... has_many :assets accepts_nested_attributes_for :asset
**Paperclip::AdapterRegistry::NoHandlerError**
(No handler found for "2009-11-29-133527.jpg"):
在我的模型中,我有:
class Product < ActiveRecord::Base
...
has_many :assets
accepts_nested_attributes_for :assets
end
class Asset < ActiveRecord::Base
belongs_to :product
has_attached_file :image,
:path => ":rails_root/public/system/:attachment/:id/:style/:filename",
:url => "/system/:attachment/:id/:style/:filename",
:styles => { :medium => "300x300>", :thumb => "100x100>" }
end
使用参数:
{...,
"product"=>{"title"=>"wibble1",
**"assets_attributes"=>{"0"=>{"image"=>"2009-11-29-133527.jpg"}
},**
"description"=>"Who is wibble...",
"price"=>"23.45"
},
"commit"=>"Create Product",
...}
有人知道发生了什么吗?确保在安装曲别针(“rake db:migrate”)后迁移数据库。。。此外,您可能需要将曲别针生成的新数据字段添加到模型中的“attr_accessible”行中。
在我的一个项目中尝试使用回形针时,我遇到了类似的问题。我自己也遇到了这个问题。在我的例子中,这是由于跳过标记中的多部分表单声明造成的 我使用的是formtastic,因此我添加了以下内容并使其正常工作:
semantic\u form\u for@picture,:html=>{:multipart=>true}do | f |
我遇到了同样的问题,我认为这是因为有两个表共享相同的附加文件名
。。。在我的例子中,我在活动和tweet中都添加了一个:photo
列,然后系统似乎可以找到其中一个,但找不到另一个。因为文件保存在/public/photo/:id/:id
路径中,如果您有两列都命名为photo
,那么我想问题就出现了。此错误是因为您没有为曲别针提供正确的类。这只是一根线
在params
"asset"=>
{"image"=>
#<ActionDispatch::Http::UploadedFile:0x000000056679e8
@content_type="image/jpg",
@headers= "Content-Disposition: form-data; name=\"asset[image]\";
filename=\"2009-11-29-133527.jpg\"\r\nContent-Type: image/jpg\r\n",
@original_filename=""2009-11-29-133527.jpg"",
@tempfile=#<File:/tmp/RackMultipart20120619-1043-yvc9ox>>}
请记住将表单设置为multipart:true
我在文件输入中有
,因此回形针附件数据是一个数组。
我只需删除文件输入中的多个属性即可解决此问题。我很确定您的问题在于视图中的表单_, 试着这样做:
<%= form_for @restaurante, :html => { :multipart => true } do |form| %>
Nome:<%= form.text_field :nome%>
Endereço:<%= form.text_field :endereco %>
Especialidade:<%= form.text_field :especialidade %>
Foto:<%= form.file_field :foto %>
<%= form.submit 'create'%>
<% end %>
data_uri = params[:canvasDataUri]
encoded_image = data_uri.split(",")[1]
decoded_image = Base64.decode64(encoded_image)
File.open("signature.png", "wb") { |f| f.write(decoded_image) }
{:multipart=>true}do| form |%>
诺姆:
恩德雷索:
特别是:
福托:
注意,在使用HTML5画布时,有一种情况值得注意。获取画布数据作为DataURI字符串并将其发送到服务器可能会导致此错误。Canvas.toDataURL()将提供类似“data:image/png;base64,iVBORw0KGg…”的内容,您可以将其与其他信息一起发送到服务器,因此它不同于标准的多部分表单上载。在服务器端,如果您只是将其设置为“回形针附件”字段,则会出现此错误。您需要将其转换为文件或IO对象。您可以这样编写临时文件:
<%= form_for @restaurante, :html => { :multipart => true } do |form| %>
Nome:<%= form.text_field :nome%>
Endereço:<%= form.text_field :endereco %>
Especialidade:<%= form.text_field :especialidade %>
Foto:<%= form.file_field :foto %>
<%= form.submit 'create'%>
<% end %>
data_uri = params[:canvasDataUri]
encoded_image = data_uri.split(",")[1]
decoded_image = Base64.decode64(encoded_image)
File.open("signature.png", "wb") { |f| f.write(decoded_image) }
或者使用Ruby的StringIO,其作用类似于内存中的文件接口
@docHolder.document = StringIO.new(decoded_image)
希望这有帮助。对我来说,问题是这样的:
<%= form_for @restaurante, :html => { :multipart => true } do |form| %>
Nome:<%= form.text_field :nome%>
Endereço:<%= form.text_field :endereco %>
Especialidade:<%= form.text_field :especialidade %>
Foto:<%= form.file_field :foto %>
<%= form.submit 'create'%>
<% end %>
data_uri = params[:canvasDataUri]
encoded_image = data_uri.split(",")[1]
decoded_image = Base64.decode64(encoded_image)
File.open("signature.png", "wb") { |f| f.write(decoded_image) }
我在控制器中使用了这样的线路,正如在一些答案中看到的:
@image = User.find(params[:id]).image.<b>path</b>(:small)
我的问题是不接受路由中的get方法,所以我将其更改为patch方法,并且工作正常
<%= form_for @product, :url => "/products/#{@product.id}/upload",:method => :patch, :html => { :multipart => true } do |f| %>
“/products/{@product.id}/upload”,:method=>:patch,:html=>{:multipart=>true}do | f |%>
在我的例子中,我传递字符串,就像@MauricioPasquierJuan的答案一样,但我没有使用表单,所以答案的其余部分不适用
我找不到任何关于如何以编程方式更新附件的文档—可以分配什么类型,以及为什么分配和保存修改后的记录不会保存修改后的附件。这个问题是我发现的最接近的问题
在处理上传zip文件中文件的函数中,将提取的文件保存到临时文件后,这是我的解决方案:
record.attachment = File.new( tempfile_path_as_string ) ## probably not the only option
record.attachment.save ## next line doesn't update attachment without this
record.save
当我们从4.2.x升级到4.3.x时,我们不得不将主回形针字段属性(
picture
,image
,等等)从相对URL更改为完整URL以消除此错误。不幸的是,这并不能解决我的问题。添加attr\u accessible:title、:description、:price、:assets\u属性也有同样的问题,对于未来的Google用户,如果您使用表单并在构建器之外添加字段,则必须手动强制表单为多部分,通过:html=>{:multipart=>true}
如上所示。简单地添加:multipart=>true
与表单不一样。这个答案对我很有用!我希望询问者会接受这个。通常情况下,当您为模型创建表单,然后最终为接受文件作为附件的子对象创建嵌套属性时,就会出现这种情况,在我的例子中,就是这种情况。(为未来的谷歌人讲述我的故事)这也是我的问题。我喜欢:multiple=>true
的便利性,但正如您所说,它将名称设置为upload[upload][]
。但是,我非常喜欢多文件选择的便利性,所以我只是手动将名称设置为不是带有:name=>“upload[upload]”的数组。
。我使用javascript和jquery fileupload一起添加了多个文件;)哈!差不多三年后,我在另一个项目上遇到了这个问题,和以前一样,这个答案和我的评论解决了我的问题。例如:put,:html=>{:multipart=>true}do%>在form_标记的情况下,它应该是form_标记路径,:multipart=>true
不带:html键。如果我从资源中选择图像,该怎么办。@Imran您是如何选择它的?这听起来真的是一个不同的问题