2011-01-25 5 views
1

これは簡単な構文の質問であるべきだと思いますが、私のアプローチが正しいかどうかはわかりません。私はpaperclipを使ってFlashからのファイルアップロードを受け入れています。アクションによってオブジェクトが正常に作成され、アップロードが保存されますが、デフォルトのXMLジェネレータでXML応答を生成しようとすると、XMLファイルにpaperclip添付ファイルを含めようとします。 Railsは406エラーを表示し、FlashはI/Oエラーをスローします。Generic Rails AJAXアクションの成功に対するXMLレスポンス?

私はa good resource on embedding paperclip attachments in XMLを見つけましたが、これはトータルオーバーキルです。すべてのフラッシュニーズは、成功または失敗のメッセージです。何かのように:

def jpg_stream 
    @photo = Photo.new(:name => params[:name], :uploaded => Time.now) 
    @photo.image = params[:image] 
    respond_to do |format| 
    if @photo.save 
     format.xml { "<success/>" } 
    else 
     format.xml { render :xml => @photo.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

この行はどのようなものでしょうか?

format.xml { "<success/>" } 

EDIT

これは、エラーのスタックトレースです。私はRailsは何が生成されても何の問題も返さないと思っていますが、406エラーはブラウザ/ Flashが応答を受け入れないことを意味します。

Started POST "/generate_jpg" for 127.0.0.1 at 2011-01-25 12:59:24 -0700 
    Processing by PhotosController#jpg_stream as HTML 
    Parameters: {"name"=>"Test snapshot", "stream_id"=>"1", "Filename"=>"this.jpg",  "image"=>#<ActionDispatch:: 
Http::UploadedFile:... 
[paperclip] identify -format %wx%h "C:/Users/Sam/AppData/Local/Temp/stream20110125-4048-zqbu60.jpg[0]" 2>NUL 
    ←[1m←[35mAREL (1.0ms)←[0m INSERT INTO "photos" ("name", "description", "stream_id", "created_at", "updated_at", "image_file_name", "image_content_type", "image_file_size", "image_updated_at") VALUES ('Test snapshot', '2011-01-25 19:59:24.630999', 1, '2011-01-25 19:59:24.687002', '2011-01-25 19:59:24.687002', 'this.jpg', 'application/octet-stream', 12251, '2011-01-25 19:59:24.651000') 
[paperclip] Saving attachments. 
[paperclip] saving .../system/images/86/original/this.jpg 
Completed 406 Not Acceptable in 108ms 

答えて

1

私は単純なバージョンを最初に試してみます:render :xml => "<success/>"。すなわち、唯一

if @photo.save 
    render :xml => "<success/>" 
else 
    render :xml => @photo.errors, :status => :unprocessable_entity 
end 

を残して、完全にrespond_toをドロップ私は(それを自分自身を使用していない)respond_toのすべてのニュアンスについてはよく分からないんだけど、format.xml { "<success/>" }を行うと、あなたからERBテンプレートが必要な場合があります。

エラースタックトレースを含めると便利です。