1

我有一个控制器,它通过 html 显示用户配置文件,通过 JSON 显示用户悬停卡 w 配置文件信息。

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 回答