Ssul's Blog

게시판 검색기능 구현(검색어 입력 & 버튼값으로) 본문

dev/기능구현

게시판 검색기능 구현(검색어 입력 & 버튼값으로)

Ssul 2020. 9. 27. 20:02

게시판에서 검색어를 입력하여 일치하는 항목만 출력하는 방법과

카테고리명을 가지고 있는 버튼을 눌러서 해당 카테고리 항목만 출력하는 방법 두개 구현

 

#1. 게시판에 검색어 입력해서 출력하는 방법

 

 

우선 뷰파일 코딩

 

<form action="/dbs" class="form-inline mt-2 mt-md-0 justify-content-center">
	<input type="text" class="form-control mr-sm-2" name="query" value="<%= params[:query] %>" placeholder="명칭검색">
	<button type="submit" class="btn btn-primary my-2 my-sm-0">검색</button>
</form>

평소와 같은 폼을 구성하고, 폼 이름을 query로 하고, 해당 폼에 입력되는 값을 value에 저장

 

 

 

 

 

컨트롤러가 쿼리가 있을때와 없을때로 구분해서 받는다.

 

def index
    #쿼리가 입력되었으면, 쿼리단어가 들어간 이름들은 전부 찾아 리턴
    if params[:query].present?
      @dbs = Db.where("name LIKE ?", "%#{params[:query]}%")
    else
      @dbs = Db.all
    end
end

 

 

 

사실 두번째가 한 30분정도 고생한것 같다.

우선 버튼으로 값을 넘기는 방법을 고민해봤는데.... 에러가 계속 발생.

하여, hidden input을 넘기는 것으로 해결

 

[결과물 먼저 출력] -> 원래 게시판에서 문화예술 버튼만 클릭시 해당게시물만 출력

 

뷰파일 코딩

 

<form action="/infos" class="d-inline">
	<input type="hidden" name="query" value="<%= info.category %>">
	<button type="submit" class="d-inline btn btn-info btn-sm"><%= info.category %></button>
</form>

hidden input을 넣어주고, 기존과 동일한 형태로 코딩

 

 

 

 

컨트롤러 코딩...

1차 시기에는 에러가 났었음. 카테고리를 enum 변수로 구성되었기 때문에, 숫자로 변환하는 방법이 필요했음.

아래와 같이 할 경우 숫자 값을 리턴

 

if params[:query].present?
      #params[:query]로 검색시 문자열로 검색하기 때문에, 숫자로 전환이 필요함
      @preinfos = Info.where(category: Info.categories[params[:query]])
    else
      @preinfos = Info.all
    end
end

 

앞으로 버튼 검색해서 출력하는 형태는 구현가능!!