Ruby on rails 缩写回应

Ruby on rails 缩写回应,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我目前正在开发一个基于Rails 3构建的web应用程序,该应用程序在客户端大量使用Ajax/REST。因此,我经常发现自己在编写控制器操作时如下所示: def create if !params[:name] respond_to do |format| format.html { render json: {}, status: :not_found } format.json { render json: {}, status: :not_found

我目前正在开发一个基于Rails 3构建的web应用程序,该应用程序在客户端大量使用Ajax/REST。因此,我经常发现自己在编写控制器操作时如下所示:

def create
  if !params[:name] 
    respond_to do |format|
      format.html { render json: {}, status: :not_found }
      format.json { render json: {}, status: :not_found }
    end
    return
  end

  account = ...
  respond_to do |format|
    format.html { render json: account }
    format.json { render json: account }
  end
end
我几乎所有的操作都是在成功案例或错误代码中返回json对象。但是,如果我想让操作更早返回,我总是必须将这个冗长的respond_写入block和return

取而代之的是,我想使用类似的方法,或者类似的方法:

def create
  if !params[:name] 
    throw :not_found
  end

  account = ...
  return account
end

如何使用Rails 3+实现这一点?

如果您总是返回json,您可以命令
respond\u to
块并像这样编写:

def create
  if !params[:name] 
    render json: {}, status: :not_found
    return
  end

  account = ...
  render json: account
end
调查一下。这将允许您将控制器重写为:

class SomeController < ApplicationController
  inherit_resources
  respond_to :html, :js, :json
end
最重要的是,您可以通过在特定控制器中定义任何方法来覆盖它们

class ResourcesController < ApplicationController
  inherit_resources
  respond_to :html, :js

  def create
    create! do |format|
      format.js do
        # generic code here for managing all create methods initiated via js
        # current model is avialbe via 'resource'
        # e.g 'resource.errors'
      end
    end
  end
class SomeController < ResourcesController

end
  format.js do
    render "#{params[:controller]}/form"
  end