0

現在、私のアプリケーションは HTML リクエストのみを処理しており、一部のアクションを拡張して JSON リクエストも処理したいと考えています。コントローラー アクションの多くはリダイレクトを実行し、リクエストが成功したかどうかに応じてセッション値 (フラッシュ) を設定します。

次のようなアクションのリクエスト形式に基づいてアクションの動作を変更するために、responds_to を組み込むにはどうすればよいですか。

 def create
  @user = User.new(params[:user])      
  if @user.save
    flash[:notice] = {:success => "User Created."}
    session[:user_id] = @user.id
        session[:username] = @user.username
    redirect_to(:controller => 'lists', :action => 'index')
  else
     flash[:notice] = {:error => @user.errors}
    render('new')
  end
end

ご覧のとおり、モデルが永続化されているかどうかを確認してから、フォームを再度リダイレクトまたはレンダリングしています。この現在の動作を維持しながら、JSON でリクエストを処理するにはどうすればよいですか? JSON リクエストは、リダイレクトなどを実行する必要はありません。

ありがとう!

4

2 に答える 2

1

これはトリックを行うようです:

def create
  @user = User.new(params[:user])      
  if @user.save
    flash[:notice] = {:success => "User Created."}
    session[:user_id] = @user.id
        session[:username] = @user.username
         respond_to do |format|
            format.json {render :json => @user}
            format.html{redirect_to(:controller => 'lists', :action => 'index')}
         end

  else
     flash[:notice] = {:error => @user.errors}
      respond_to do |format|
         format.json {render :json => @user.errors}
         format.html{render('new')}
      end
  end
end
于 2012-11-09T22:27:31.297 に答える
1

私のアプリケーションにも同様の要件があります。HTML コントローラーと JSON コントローラーには共通点がほとんどないため、JSON API 用に別のコントローラー セットを作成することにしました。また、API の構築と JSON (私の場合は RocketPants) に固有の gem を簡単に使用できます。

于 2012-11-09T06:22:27.863 に答える