【问题标题】:Rails detecting the request type in the controller?Rails 检测控制器中的请求类型?
【发布时间】:2012-01-12 20:00:12
【问题描述】:

我有一个控制器,它通过 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 请求时才发生重定向?什么是正确的轨道,干净的方式来处理这个?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 actioncontroller


    【解决方案1】:

    如果它不适用于所有格式,请将检查放入格式处理程序中。或者让您重定向的路径返回对 JSON 格式有意义的内容。

    在不提供有关请求失败原因的任何信息的情况下进行重定向有点对用户不利——这似乎是一个通过有意义的呈现而不是所有格式的重定向更好地解决的问题。

    (你不需要指定应用程序布局,真的,这是默认的。)

    回应评论的澄清(我认为):

    每种格式的块就是:块。它们可能包含任意代码,例如:

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

    也许不是最干净的,部分原因是我认为首先处理它的方法是错误的。

    【讨论】:

    • @AnApprentice 不关注什么?
    猜你喜欢
    • 2013-08-11
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    相关资源
    最近更新 更多