0

Railsコントローラーに次のパターンがあります。

def get_details
  # check params for valid input
  ...
  if !valid
    render :json, error_info, :status => 400 and return
  end

  begin
    ...
    ...
    ...
    render :json => result, :status => 200 and return
  rescue Exception => e
    if e.is_a? ActiveRecord::RecordNotFound
      render :json => error_info, :status => 404 and return
    end
  end

end

render が返されないため、and returnすべての render 呼び出しに追加する必要がありますが、これはあまり DRY ではないように思えます。このパターンに代わるものはありますか?

4

1 に答える 1

0

次のように書くことができます

def get_details
  # check params for valid input
  ...
  if !valid
    return render_with(error_info, 400)
  else
    begin
      ...
      ...
      ...
      return render_with(result, 200)
    rescue Exception => e
      if e.is_a? ActiveRecord::RecordNotFound
        return render_with(error_info, 404)
      end
    end    
  end
end

private

def render_with(result_info, status_code)
  render :json => result_info, :status => status_code
end
于 2013-03-26T09:18:00.580 に答える