2

このガイドに従って、Rails 3.2 アプリで jquery ファイルのアップロードを設定しようとしています。

すべてがほぼ完璧に機能しています、[アップロードの開始] をクリックすると、Chrome のコンソールに次のエラーが表示されます。

POST http://testapp.dev/photos 500 (Internal Server Error) 

私が得ているログで:

ActionView::MissingTemplate (Missing template photos/create, application/create with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :coffee]}.

私は細かい櫛でコントローラーを調べましたが、このエラーの原因や、作成パーシャルを探している理由を特定できません。これをデバッグする体系的な方法は何ですか?

ありがとう

編集

私のコントローラーのアクションは次のようになります。

class PhotosController < ApplicationController

  def index

   @photos = Photo.all
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @photos }
      format.json { render :json => @photos.collect { |a| a.to_jq_upload }.to_json }
      format.js { render :json => @photos.collect { |a| a.to_jq_upload }.to_json }
    end
  end

  def show
    @photo = Photo.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @photo }
      format.json { render :json => @photo }
      format.js   
    end
  end

  def new
    @photo = Photo.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @photo }
      format.json { render :json => @photo }
      format.js 
    end
  end


  def edit
    @photo = Photo.find(params[:id])

  end

  def create
    @photo = Photo.new(params[:photo])

    respond_to do |format|
      if @photo.save
        format.html {  
                  render :json => [@photo.to_jq_upload].to_json, 
                  :content_type => 'text/html',
                  :layout => false
                }
        format.json { render :json => [ @photo.to_jq_upload].to_json }
        format.js

      else 
        format.html { render :action => "new" }
        format.xml  { render :xml => @photo.errors, :status => :unprocessable_entity }
        format.json { render :json => [  {:error => "An error was encountered while processing your photos. Please try again."}], status: 304 }
        format.js
      end      
    end
  end



      def update
    @photo = Photo.find(params[:id])

    respond_to do |format|
      if @photo.update_attributes(params[:photo])
        format.html { redirect_to(@photo, :notice => 'Asset was successfully updated.') }
        format.xml  { head :ok }
        format.json { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @photo.errors, :status => :unprocessable_entity }
        format.json { render json: @photo.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /assets/1
  # DELETE /assets/1.xml
  def destroy
    @photo = Photo.find(params[:id])
    @photo.destroy

    respond_to do |format|
      format.html { redirect_to(photos_url) }
      format.xml  { head :ok }
      format.json { render :json => true }
      format.js
    end
  end
    end
4

1 に答える 1

7

テンプレートをレンダリングしようとするrespond_toブロックがヒットしているようです(オプションが指定されていない場合のデフォルト)。format.js

使用しているjQuery-file-uploadプラグインには特定のJSON応答が必要なため、respond_toブロックを設定する必要はないようで、次の問題を回避できます。

def create
    @photo = Photo.new(params[:photo])

    if @photo.save
        render :json => [ @photo.to_jq_upload].to_json
    else 
        render :json => [{ :error => "An error was encountered while processing your photos. Please try again." }], :status => 304
    end      
end

また、アプリケーション内にブレークポイントを設定できるデバッガーgemを強くお勧めします。これにより、何が起こっているのかをより正確に把握できます。

gemを追加するにはdebugger、最初にgemをに追加し、コマンドラインからGemfileを実行する必要があります。次に、ブレークポイントを設定するコード行にbundle install単語を追加するだけです。debuggerあなたの場合、あなたはすることができます

def create
    @photo = Photo.new(params[:photo])
    debugger

    if @photo.save
    # ... rest of code

最後に、オプションを使用してサーバーを再起動する必要があり--debuggerます。jQuery-file-uploadプラグインがリクエストをサーバーに送信すると、ブレークポイントに到達し、渡されたパラメーターをより適切に分析し、コードをステップ実行して何が起こっているのかを把握できます。乾杯。

于 2012-06-12T04:32:13.627 に答える