6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】他人の編集画面に遷移しないようにするには

Posted at

#####My Profile
プログラミング学習歴②ヶ月目のアカウントです!
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすいように簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。 

#対象者

・deviseの設定をしている方
・画面の遷移先を指定したい方

#手順目次
1.before_actionとauthenticate_user!を設定する

2.correct userについてストロングパラメーターの下で定義する

#実際の手順と実例
###1.before_actionを設定する

対象のコントローラーに入力する(今回はBooks controllerを例に上げてます)

class BooksController < ApplicationController
  before_action :correct_user, only: [:edit, :update]
:
:
end

・before_actionは各アクションが実行される前に呼ばれます。
・今回は後ろのonlyで呼び出す前にアクションをeditとupdateで限定しています。

このあとcorrect_userを定義していきます。

###2.correct userについてストロングパラメーターの下で定義する

入力方法は以下の通り

 def edit
  :
 end

 def update
  :
 end

  private

  def book_params
    params.require(:book).permit(:title, :body)
  end

  def correct_user
    @book = Book.find(params[:id])
    @user = @book.user
    redirect_to(books_path) unless @user == current_user
  end

一番下に注目です。
まず、
 ①@book = Book.find(params[:id])でidのついた本を1つ選びます。
 ②@user = @book.userで①で選んだ本をもってるUserであると定義(Userモデルと関連付けています)
 ③redirect_to(books_path) unless @user == current_user ②で定義したuserと現在ログインしているuserが一致していなければ、一覧ページにリダイレクトされます。

上記の1、2を両方設定すると他人の編集画面にURL直打ちでは遷移できなくなります!

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?