下記は’失敗⤵︎’ が返ってくる。

def destroy(id)
  ActiveRecord::Base.transaction do
    raise 'ほげ'
  end

  render json: { message: '成功!!' }
rescue => e
  render json: { message: '失敗⤵︎' }
end

下記の場合は transaction の中で ActiveRecord::Rollback が捕捉されるため、「’成功!!’」が返ってくる。

def destroy(id)
  ActiveRecord::Base.transaction do
    raise ActiveRecord::Rollback
  end

  render json: { message: '成功!!' }
rescue => e
  render json: { message: '失敗⤵︎' }
end

参考ソースコード