1

HTML経由でユーザープロファイルを表示するコントローラーがあり、JSON経由でプロファイル情報付きのユーザーホバーカードを表示します。

class UsersController < ApplicationController

  def show
    @user = User.where(:id => params[:id]).first

    return redirect_to "/" if @user.nil?

    respond_to do |format|
      format.html { render :layout => 'application' }
      format.json { render :json => @user.to_json }
    end
  end
end

問題は、ユーザーが見つからない場合にリダイレクトすることです。これは、HTML 経由ではうまく機能しますが、JSON ではエラーが発生します。HTMLリクエストの場合にのみリダイレクトを発生させるクリーンな方法はありますか? これを処理するための正しいレール、クリーンな方法は何ですか?

ありがとう

4

1 に答える 1

4

すべての形式に適用できない場合は、形式ハンドラーにチェックを入れます。または、パスをリダイレクトして、JSON 形式で意味のあるものを返すようにします。

リクエストが失敗した理由に関する情報を提供せずにリダイレクトするのは、ややユーザーに敵対的です。これは、すべての形式のリダイレクトではなく、意味のあるレンダリングによって解決される問題のようです。

(アプリケーションのレイアウトを指定する必要はありません。実際には、それがデフォルトです。)

コメントへの回答の明確化(私は思う):

各フォーマットのブロックは、ブロックです。以下のような任意のコードが含まれている可能性があります。

respond_to do |format|
  format.html { @user.nil? ? redirect_to "/" : render }
  format.json { render :json => @user.to_json }
end

そもそもそれを処理する方法が間違っていると思うため、おそらく最もクリーンではありません。

于 2012-01-12T20:01:50.423 に答える