상품의 상태를 표현하는 방법!
상품 준비중(pending)/재고있음(active)/재고없음(disabled)
정수값으로 데이터가 입력된다.
SQL 문법을 이용해서 해킹하는 방식
/items?q=강아지&status=active
으로 파라미터를 넘겨줬을 때, 데이터를 조회하는 방법
def index
items = Item.where("name like ?", "%#{params[:q]}%")
# '강아지'를 포함한 이름이 조회된다.
# 물음표 안으로 %#{params[:q]}%이 들어가는 것! (SQL 문법)
items = Item.send(params[:status]) # 이 방법은 위험해여. status값을 악의적으로 disabled로 변경할 수 있다.
Ransack과 Ransaker를 사용하여 SQL injection을 방어할 수 있다.
-> ansack 공식문서
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
```