Ruby on rails 如何从before筛选器停止Rails控制器操作,并使用422不可处理实体进行响应?

Ruby on rails 如何从before筛选器停止Rails控制器操作,并使用422不可处理实体进行响应?,ruby-on-rails,Ruby On Rails,我的Rails控制器中有一个方法(“before filter”),如果缺少一些参数,它需要用422状态码进行响应。如何在before筛选器中执行此操作 class FoobarsController < ApplicationController before_action :find_parent def create if @parent.foobar.save render @parent.foobar, status: :created el

我的Rails控制器中有一个方法(“before filter”),如果缺少一些参数,它需要用422状态码进行响应。如何在before筛选器中执行此操作

class FoobarsController < ApplicationController
  before_action :find_parent

  def create
    if @parent.foobar.save
      render @parent.foobar, status: :created
    else
      render @parent.foobar.errors, status: :unprocessable_entity
    end
  end

  def find_parent
    if params[:parent_id]
      @parent = Parent.find(params[:parent_id])
    elsif params[:foobar_id]
      @parent = Foobar.find(params[:foobar_id])
    else
      raise 'Missing parent ID param' # TODO: respond with 422 status instead of 500
    end
  end
end
class FoobarsController
:状态
选项的渲染方法将执行以下操作:

render status: 422

可以找到更多信息

正如@MaxWilliams在评论中指出的,在像您这样的复杂代码中,最好使用
return
render
语句:

render(status:422) and return

我会执行
render(状态:422)并返回
,以确保它不会继续执行任何其他操作。嗯……可能我错过了返回,因为我尝试调用
render
,但它通过控制器继续action@Andrew我不这么认为。一旦“过滤”完成,如果渲染,它就不应该继续。也许我在尝试时使用了私有方法。
render(status:422) and return