[INSOMENIA] TIL 07
특정 key값으로 검색한 API를 불러오기
Enum
상품의 상태를 표현하는 방법!
상품 준비중(pending)/재고있음(active)/재고없음(disabled)
정수값으로 데이터가 입력된다.
- Class method
특정 클래스에서 직접적으로 실행할 수 있다.
self를 앞에 붙여 사용한다. - Instance method
객체 내부에서 실행할 수 있다.
Current user
- users 안에 items 경로 추가 - 특정 판매자의 상품조회
- 현재 사용자의 주문정보 조회 = current_api_user
SQL injection
SQL 문법을 이용해서 해킹하는 방식
/items?q=강아지&status=active
으로 파라미터를 넘겨줬을 때, 데이터를 조회하는 방법
- SQL injection 위험
def index
items = Item.where("name like ?", "%#{params[:q]}%")
# '강아지'를 포함한 이름이 조회된다.
# 물음표 안으로 %#{params[:q]}%이 들어가는 것! (SQL 문법)
items = Item.send(params[:status]) # 이 방법은 위험해여. status값을 악의적으로 disabled로 변경할 수 있다.
Ransack과 Ransaker를 사용하여 SQL injection을 방어할 수 있다.
-> ansack 공식문서
- Ransack 사용하기
- Ransacker 기존 로직을 바꿔주는 방식
def index
#items = Item.ransack(name_cont: params[:q], status_eq: params[:status], s: params[:s]).result
items = Item.ransack(params[:q]).result
render json: each_serialize(items)
end
#item.rb에 아래 내용 추가
ransacker :status, formatter: proc {|status| statuses[status]} # integer로 검색한다.
프론트에서 params 전달 시
params ={
q[category_id_eq]: 1,
q[subcategory_id_eq]: 2,
}
// 쿼리 파라미터
/items?category_id_eq=1&category_id_eq=2
```
Author And Source
이 문제에 관하여([INSOMENIA] TIL 07), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@songbetter/INSOMENIA-TIL-07저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)