42

Rails 3.2.2 で Paperclip 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 :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

例外は次の場所で発生します。

def create
     **@product = Product.new params[:product]**
     ...
end

パラメータ付き:

{...,
 "product"=>{"title"=>"wibble1", 
             **"assets_attributes"=>{"0"=>{"image"=>"2009-11-29-133527.jpg"}
                                  },** 
             "description"=>"Who is wibble...", 
             "price"=>"23.45"
            }, 
             "commit"=>"Create Product", 
             ...}

何が起こっているか知っている人はいますか?

4

11 に答える 11

49

このエラーは、Paperclip に正しいクラスを与えていないために発生します。それはただの文字列です。

このようなものを受け取る必要があります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>>}

そして、yout View には次のようなものが必要です (HAML では、非常に単純化されています)。

= form_for @product, html: { multipart: true } do |f|
  = f.fields_for :asset do |asset_form|
    = asset_form.file_field :image

フォームを に設定することを忘れないでくださいmultipart: true

于 2012-06-19T19:46:25.167 に答える
29

私は自分でこの問題に遭遇しました。私の場合、マークアップのマルチパートフォーム宣言をスキップしたことが原因でした。

私はformtasticを使用していたので、これを追加して機能させました。

semantic_form_for @picture, :html => {:multipart => true} do |f|

于 2012-04-09T16:07:55.593 に答える
2

私は<input type="file" ... multiple="multiple">ファイル入力をしていたので、クリップの添付データは配列になっていました。ファイル入力で複数の属性を削除するだけでこれを解決しました。

于 2012-10-31T16:10:53.217 に答える
1

ビューの form_for に問題があると確信しています。次のようなことを試してください。

<%= 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 %>
于 2014-01-01T14:33:37.043 に答える
0

Paperclip をインストールした後、必ずデータベースを移行してください ('rake db:migrate')... また、Paperclip によって生成された新しいデータ フィールドをモデルの 'attr_accessible' 行に追加する必要がある場合もあります。自分のプロジェクトの 1 つで Paperclip を機能させようとしたときに、同様の問題が発生しました。

于 2012-04-05T17:56:20.650 に答える
0

同じ問題に遭遇しました。同じものを共有する2つのテーブルがあるためだと思いますattached_file_name...私の場合、:photoアクティビティとツイートの両方に列を追加すると、システムがそれらの1つを見つけることができるようですしかし、他ではありません。ファイルはパスに保存されるため、/public/photo/:id/:id両方とも という名前の列が 2 つある場合photo、問題が発生すると思います。

于 2012-04-14T07:37:06.690 に答える
0

私にとって問題は次のようなものでした:

いくつかの回答で見たように、コントローラーでそのような行を使用しました:

@image = User.find(params[:id]).image.<b>path</b>(:small)

そして、「ファイルのハンドラがない」という問題がありました

だから、「パス」を削除しただけでうまくいきました:

@image = User.find(params[:id]).image(:small)
于 2015-04-12T11:07:34.413 に答える