【Rails】scaffoldで作ったCRUDの、editやdestroyアクションに制限を設定する

Ruby on Railsアイキャッチ画像

タイトルの通り、scaffoldで作ったCRUDの、editやdestroyアクションに制限を設定する方法について。

いつも通りに書くなら、

def destroy
  redirect_to blogs_path unless current_user == @blog.user
  省略
end

こうすると、destroyアクション内で、その後にも同じredirect_toのpathが使われているため、こんなエラーとなる。

AbstractController::DoubleRenderError

そこで、returnを使う。

def destroy
  return redirect_to blogs_path unless current_user == @blog.user
  省略
end

これでエラー解決

実例

  def destroy
    return redirect_to homes_path unless current_user == @customer.user
    @customer.destroy
    respond_to do |format|
      format.html { redirect_to homes_path, alert: t('views.messages.destroy_customer') }
      format.json { head :no_content }
    end
  end

redirect_to homes_pathを後にも使用しているため、ダブってエラーとなる。

コメント