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