Rails:respond_to JSON和HTML

Don*_*n P 41 ruby ruby-on-rails respond-to ruby-on-rails-4

我有一个控制器"UserController",应该响应正常和ajax请求http://localhost:3000/user/3.

当它是正常请求时,我想渲染我的视图.当它是一个AJAX请求时,我想返回JSON.

正确的方法似乎是一个respond_to do |format|障碍.编写JSON很简单,但是如何让它响应HTML并像往常一样呈现视图?

  def show
    @user = User.find(params[:id])
    respond_to do |format|
      format.html {
        render :show ????this seems unnecessary. Can it be eliminated??? 
      }
      format.json { 
        render json: @user
      }
    end
  end
Run Code Online (Sandbox Code Playgroud)

Ami*_*Jha 79

根据我的知识,它不需要在format.html中"渲染显示",它将自动查找ex:show.html.erb的html请求和show,js,erb for JS request的相应操作视图.

所以这会奏效

respond_to do |format|

  format.html # show.html.erb
  format.json { render json: @user }

 end
Run Code Online (Sandbox Code Playgroud)

另外,您可以通过检查request.xhr来检查请求是否为ajax?如果request是ajax,则返回true.


San*_*osh 19

是的,您可以将其更改为

respond_to do |format|
  format.html
  format.json { render json: @user }
end
Run Code Online (Sandbox Code Playgroud)