1

HTML5のアップロードを行っていますが、理解できない問題が発生しています。この機能するコードを見てください:

if @image.save
    render :json => {:status => "Successfully uploaded image!"}
else
    render :json => {:status => "Something went wrong with your upload!"}
end

それは機能し、それが想定されていることを正確に実行します。ただし、応答を追加してHTML要求をキャッチすると、完全に失敗します(HTML部分は機能します)。

respond_to do |format|
    if @image.save
        format.html {redirect_to(edit_product_path(@image.product), :notice => "Your image was added successfully.")}
        format.json {render :status => "Successfully uploaded image!"}
    else
        format.html {redirect_to(edit_product_path(@image.product), :alert => "An error occurred while attempting to upload your image. Please try again.")}
        format.json {render :status => "Something went wrong with your upload!"}
    end 
end

何が間違っている可能性があるのか​​?シンプルなものを見落としているような気がします。ありがとう。

編集-問題は解決しました

私はそれが私が見落とし続けた愚かなことだと思いました。リクエストはJSONではなくHTMLであることが判明しました。これは、アップロードにはコンテンツタイプがmultipart / form-dataである必要があるため、respond_toがHTMLをトリガーしていたためです。

4

2 に答える 2

2

Render はステータス コードを想定しているため、次のコードは機能しません

format.json {render :status => "Something went wrong with your upload!"}

次のように書き出すことができます。

format.json {render :error => "Something went wrong with your upload!", :status => :bad_request }
于 2012-07-12T07:00:56.940 に答える
0

レスポンスをjsonにレンダリングする必要があります

# old
format.json {render :status => "Successfully uploaded image!"}

# new
format.json { render(:json => { :status => "Successfully uploaded image!" }) }
于 2012-07-12T04:49:50.753 に答える