복붙노트

[RUBY-ON-RAILS] 종이 클립 예외 : 종이 클립 :: AdapterRegistry :: NoHandlerError

RUBY-ON-RAILS

종이 클립 예외 : 종이 클립 :: AdapterRegistry :: NoHandlerError

이 오류가 발생했습니다 3.2.2 I 레일에 종이 클립 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

PARAMS와 :

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

사람은 무슨 일이 일어나고 있는지 알아?

해결법

  1. ==============================

    1.당신은 종이 클립에게 올바른 클래스를 제공하지 않기 때문에이 오류가 발생합니다. 그것은 단지 문자열입니다.

    당신은 종이 클립에게 올바른 클래스를 제공하지 않기 때문에이 오류가 발생합니다. 그것은 단지 문자열입니다.

    당신은 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>>}
    

    그리고 당신은 (XAML에서 매우 간체)보기에 이런 일이 있어야합니다

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

    사실 : 여러 부분에 양식을 설정해야합니다.

  2. ==============================

    2.난 그냥이 문제를 자신에 달렸다. 내 경우에는 그것은 마크 업의 다중 형태의 선언을 건너 뛰는에 의해 발생했다.

    난 그냥이 문제를 자신에 달렸다. 내 경우에는 그것은 마크 업의 다중 형태의 선언을 건너 뛰는에 의해 발생했다.

    나는이 추가 작업을 얻었다 그래서 나는 formtastic 사용하고 있었다 :

    semantic_form_for @picture : HTML => {: 멀티 => TRUE} 할 | F |

  3. ==============================

    3.가치가 주목할 인 HTML5 캔버스로 작업 할 때 참고가되는 상황이있다. DataURI 문자열로 캔버스 데이터를 가져 오기 및 서버에이 오류가 발생할 수 있음을 보낼. 표준 여러 부분으로 양식 업로드에 비해 너무 다른, 다른 정보를 서버로 보낼 수 있습니다 : 캔버스 .toDataURL ()는 "64 기수, iVBORw0KGg ... 이미지 / PNG 데이터"와 같은 무언가를 줄 것이다. 서버에 당신은 당신이 오류를 얻을 것이다 클립 부착 필드로 설정합니다. 당신은 파일이나 IO 객체에 Conver 유럽해야합니다. 이 같은 임시 파일을 작성할 수 있습니다 :

    가치가 주목할 인 HTML5 캔버스로 작업 할 때 참고가되는 상황이있다. DataURI 문자열로 캔버스 데이터를 가져 오기 및 서버에이 오류가 발생할 수 있음을 보낼. 표준 여러 부분으로 양식 업로드에 비해 너무 다른, 다른 정보를 서버로 보낼 수 있습니다 : 캔버스 .toDataURL ()는 "64 기수, iVBORw0KGg ... 이미지 / PNG 데이터"와 같은 무언가를 줄 것이다. 서버에 당신은 당신이 오류를 얻을 것이다 클립 부착 필드로 설정합니다. 당신은 파일이나 IO 객체에 Conver 유럽해야합니다. 이 같은 임시 파일을 작성할 수 있습니다 :

    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) }
    

    또는 메모리 파일 인터페이스에서 같은 역할을 루비의 StringIO를 사용

    @docHolder.document = StringIO.new(decoded_image)
    

    도움이 되었기를 바랍니다.

  4. ==============================

    4.그래서 클립 첨부 데이터 배열이고, 입력 파일에 있었다. 단순히 파일 입력에 여러 속성을 제거하여이 문제를 해결했다.

    그래서 클립 첨부 데이터 배열이고, 입력 파일에 있었다. 단순히 파일 입력에 여러 속성을 제거하여이 문제를 해결했다.

  5. ==============================

    5.내가 패치 방법으로 변경할 수 있도록 내 문제는 루트에서 get 메소드를 수용되지 않았고 그것을 잘 작동합니다.

    내가 패치 방법으로 변경할 수 있도록 내 문제는 루트에서 get 메소드를 수용되지 않았고 그것을 잘 작동합니다.

    <%= form_for @product, :url => "/products/#{@product.id}/upload",:method => :patch, :html => { :multipart => true } do |f| %>
    
  6. ==============================

    6.나는 꽤, 문제는보기에 form_for와 확신 이 같은 시도 :

    나는 꽤, 문제는보기에 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 %>
    
  7. ==============================

    7.( ': 마이그레이션 레이크 DB') 또한,이 모델에 'attr_accessible'라인에 종이 클립에 의해 생성 된 새로운 데이터 필드를 추가해야 할 수 있습니다 ... 당신은 종이 클립을 설치 한 후에 당신이 데이터베이스를 마이그레이션합니다. 내 프로젝트 중 하나에 GET 종이 클립 일하는하려고 할 때 나는 비슷한 문제가 있었다.

    ( ': 마이그레이션 레이크 DB') 또한,이 모델에 'attr_accessible'라인에 종이 클립에 의해 생성 된 새로운 데이터 필드를 추가해야 할 수 있습니다 ... 당신은 종이 클립을 설치 한 후에 당신이 데이터베이스를 마이그레이션합니다. 내 프로젝트 중 하나에 GET 종이 클립 일하는하려고 할 때 나는 비슷한 문제가 있었다.

  8. ==============================

    8.나는이 같은 문제를 만났다, 나는이 같은 attached_file_name을 공유하는 두 개의 테이블이 있기 때문에이 생각 ... 내 경우, 나는 추가 : 모두 활동과 트위터에 사진을 열을, 다음의 경우는 시스템이 찾을 수있는 것 같다 그들 중 하나지만 다른 없습니다. 파일이에 공개 / 저장되기 때문에 / 사진 / : ID / : 당신이 두 개의 열이있는 경우 ID 경로는 모두 사진으로, 다음 문제는 내가 생각 발생 지명했다.

    나는이 같은 문제를 만났다, 나는이 같은 attached_file_name을 공유하는 두 개의 테이블이 있기 때문에이 생각 ... 내 경우, 나는 추가 : 모두 활동과 트위터에 사진을 열을, 다음의 경우는 시스템이 찾을 수있는 것 같다 그들 중 하나지만 다른 없습니다. 파일이에 공개 / 저장되기 때문에 / 사진 / : ID / : 당신이 두 개의 열이있는 경우 ID 경로는 모두 사진으로, 다음 문제는 내가 생각 발생 지명했다.

  9. ==============================

    9.나를 위해 문제는 다음과 같이했다 :

    나를 위해 문제는 다음과 같이했다 :

    좀 답변에서 톱을 같이 컨트롤러와 같은 라인을 사용 :

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

    나는 "파일에 대한 처리기"문제 없었다

    그래서, 난 그냥 "경로"를 제거하고 일했다 :

    @image = User.find(params[:id]).image(:small)
    
  10. ==============================

    10.내 경우에는 내가 MauricioPasquierJuan의 대답 @ 같이 문자열을 전달했지만, 대답의 나머지 부분은 적용되지 않습니다 그래서 나는 양식을 사용하지 않았다.

    내 경우에는 내가 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
    
  11. ==============================

    11.우리가 4.3.x에서로 4.2.x를 업그레이드 할 때, 우리는이 오류를 제거하기 위해 전체 URL에 상대 URL의 주요 클립 필드 속성 (영상, 이미지 등)를 변경했다.

    우리가 4.3.x에서로 4.2.x를 업그레이드 할 때, 우리는이 오류를 제거하기 위해 전체 URL에 상대 URL의 주요 클립 필드 속성 (영상, 이미지 등)를 변경했다.

  12. from https://stackoverflow.com/questions/10033425/paperclip-exception-paperclipadapterregistrynohandlererror by cc-by-sa and MIT license