#####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直打ちでは遷移できなくなります!