Controller
Strong Parameter
:대량 할당 취약성에 대한 화이트 리스트 대책 방법이다.
대량 할당 취약성 : 악의적인 사용자가 자신의 계정에 관리자 권한을 부여해 시스템을 조작할 위험이 있음.
require
메서드는 지정된 모델의 키가 존재하는지 확인 후 존재하면 해당 값들을 리턴하고, 존재하지 않으면ActionController::ParameterMissing
예외가 발생한다.permit
메서드는 모델에 일괄적으로 추가할 속성들을 허가하는 메서드이다. 리턴값으로 지정된 키만 포함하는 해시를 리턴한다.
이렇게 Strong Parameters는 한꺼번에 입력할 수 있는 속성들을 필터링하므로 악의적인 사용자가 값을 임의로 넣는 것을 미연에 방지 할 수 있다.
Filter
: 액션 메서드가 실행되기 이전과 이후에 부가 처리를 위해서 사용한다. 컨트롤러 전체에 적용된다.
before & after filter(전,후 처리)
around filter(전후처리 한번에)
filter 적용 범위 지정
: 필터는 해당 컨트롤러 + 파생된 컨트롤러렝 적용된다.
only와 except 옵션( 필터 적용범위 제한)
only
는 지정한 액션에만 필터를 적용, except
옵션은 지정된 액션에 필터 적용을 제외.
이 옵션들은 최대한 적게 사용할 것을 권장한다. 많이 사용하게되면 코드의 가독성이 떨어지고 디버그할 때도 문제를 찾기 힘들어진다. 그러므로 컨트롤러 모든 액션에 공통적으로 적용할 수 있는 부분은 최대한 필터로 적용하고, 다른 부분은 검토해라.
skip_xxxxx_action (상속한 필터를 제외)
Resource
: CRUD 할 수 있는 정보라고 생각하면 좋다.
resources
는 여러개의 리소스를 관리하는 RESTful 인터페이스 생성, resource
는 하나의 리소스를 관리하는 interface생성! 이때 차이점은 resource
는 index액션이 정의되지 않았으므로, show,edit,delete에서 :id매개변수를 받지 않는다.
1. constraints(라우트 매개변수 제약조건)
:id
의 라우트 매개변수가 포함이 되어있을때 모든 값을 전달할 수 있지만, 어떤 값이 전달될 지를 미리 알고 있다면 어느정도 제한을 걸어두는 것이 좋다.
2. 제약 클래스 정의(복잡한 제약조건)
: 정규 표현식만으로 표현할 수 없는 복잡한 제약 조건을 설정하고 싶다면 제약 클래스를 사용한다.
matches?
메서드를 만들어주면된다. 이때 두가지 규칙을 지켜야한다.
매개변수로 요청정보(request 객체)를 받음
리턴 값으로는 라우트를 유효화 할지에 대한 true or false 리턴
3. format(form 매개변수제거)
URL패턴에서 format이 제거된 라우트가 생성된다.
4. controller & as(컨트롤러 클래스,url 헬퍼 이름수정)
5. namespace & scope (모듈 내부 컨트롤러 맵핑)
: 컨트롤러를 폴더로 정리하고 싶은 경우 > rails generate controller Admin::Books
를 하면 controllers/admin폴더 아래에 books_controller가 생성된다. 이때 RESTful을 정의하려면
6. collection & member(RESTful 인터페이스에 액션추가)
7. only & except
: 기본적으로 생성되는 액션의 일부를 무효화 시키고 싶을ㄸ!
8. resources 중첩
: 애플리케이션 내부에서 계층 관계를 갖는 경우
shallow
는 :id
매개변수를 받지 않는 액션에 :book_id 매개변수가 붙는다.
Last updated