[Rails] before_action 사용하기

soyeon207·2022년 4월 5일
0

Rails

목록 보기
1/1
post-thumbnail

before_action 에서는 메소드 호출하는 것 밖에 안되는 줄 알았던 며칠 전까지의 나 ..
권한 관련해서 작업을 하다 보니 before_action 에 권한을 파라미터로 넘기고 싶다는 생각이 들었다.

혹시 before_action 에도 파라미터를 넘길 수 있나 ... ? 반 장난 반 진심으로 찾아 봤는데
before_action 에도 파라미터를 넘길 수 있다는 걸 알고 충격을 받아버렸다 ......

그래서 오늘은 Rails 에서 before_action 을 사용할 수 있는 방법을 정리해보기로 했다.

before_action 이란 ?

모든 액션이 실행되기 전에 먼저 실행되는 필터

기본 문법은 아래와 같이 사용하면 된다.

before_action :method

실제 컨트롤러에 적용한다고 했을 때에는 Controller 파일 명 바로 아래에 명시해주면 된다.

class TestController < ApplicationController
	before_action :test
end

이렇게 사용해 주는 경우 다른 액션들이 일어나기 전 test 메소드가 먼저 실행 되게 된다.

특정 액션에서만 사용하기 (only)

특정 액션에서만 메소드를 실행시키고 싶을 때에는 뒤에 only 를 붙여서 사용해준다.

before_action :메소드, only: [:액션]

only 뒤에 액션을 지정할 때에는 심볼, 문자열, %w 등 여러 가지 방법을 사용할 수 있다.

  1. 심볼 사용 ➡️ before_action :test, only: [:show]

  2. 문자열 사용 ➡️ before_action :test, only: ["show"]

  3. %w 사용 ➡️ before_action :test, only: %w[show]

특정 액션에서만 사용하지 않기 (except)

특정 액션에서만 메소드를 실행시키지 않고 싶을 때에는 뒤에 except 를 붙여서 사용해준다.

before_action :메소드, except: [:액션] 

해당 방법도 only 와 동일하게 심볼, 문자열, %w 등 여러 가지 방법으로 사용할 수 있다.
하지만 only 보다 가독성이 떨어지기 때문에 보통 except 를 많이 사용하진 않는다.

특정 조건에서만 사용하기 (if, unless)

특정 조건에서만 사용하게 하는 방법으로는 if, unless, proc, lamdba 등 다양한 옵션을 사용할 수 있다.

  1. if
    before_action :메소드, if: :메소드
    로 옵션을 적게 되면 메소드가 true 인 경우에만 before_action 이 실행된다.

  2. unless
    before_action :메소드, unless: :메소드
    인 경우 메소드가 false 인 경우에만 before_action 이 실행된다.

if, unless 를 사용할 때 메소드를 넣는 게 아니라 직접 코드를 넣을 수 있다. 코드를 넣을 수 있는 방법은 proc, lamdba 총 두가지 방법이 존재한다.

  1. proc
    if, unless 등으로 옵션을 지정할 때 메소드가 아니라 proc 를 사용해서 코드를 지정할 수 있다.
    before_action :메소드, if: proc {current_user.id == 1}
    이렇게 하면 현재 유저의 아이디가 1인 경우에 메소드가 실행되게 된다.

  2. lamdba
    before_action :메소드, if: -> {current_user.id == 1}
    이렇게 하면 위의 proc 와 완전 동일한 조건으로 실행되게 된다.

파라미터 넘기기

before_action -> { 메소드(파라미터) }

이렇게 작성하면 before_action 에서 실행될 메소드에 파라미터를 넘길 수 있다.

🙇🏼‍♀️ 레퍼런스

【Rails】 before_actionの使い方とオプションについて

profile
velog 개편중입니다 👩‍💻

1개의 댓글

comment-user-thumbnail
2022년 4월 22일

감사합니다 ~

답글 달기