본문 바로가기

Archived(Programming)/Ruby on Rails(기초)

RubyOnRails 4) Search 검색하기

RubyOnRails 4) Search 검색하기



Search 검색기능을 처리해주기 위해 먼저, Navbar view를 처리해준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
\app\views\posts\_navbar.html.erb
 
<form class="form-inline my-2 my-lg-0" action="/posts/search" method="get">
        <div class="form-group">
        <select name="cate" class="form-control" id="exampleFormControlSelect1">
          <option value="1">제목</option>
          <option value="2">내용</option>
          <option value="3">제목+내용</option>
          <option value="4">작성자</option>
        </select>
      </div>
      
      <input name="q" class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
cs



그 다음, posts Controller에 action을 추가해준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
\app\controllers\posts_controller.rb
 
# 검색하기 -------------------------------------------------  
def search
    if params[:cate] == "1"
      @posts =Post.where("title LIKE ?""%#{params[:q]}%")
    elsif params[:cate] == "2"
      @posts =Post.where("content LIKE ?""%#{params[:q]}%")
    elsif params[:cate] == "3" #OR 처리
      @posts =Post.where("title LIKE ? OR content LIKE ?""%#{params[:q]}%","%#{params[:q]}%")
    elsif params[:cate] == "4"  #작성자 검색은 조금 다름
      @posts = User.where("username LIKE ?","%#{params[:q]}%").take.posts
    endend
end
cs


마지막으로, Route와 View를 처리해준다.


1
2
3
4
5
6
\config\routes.rb
 
get 'posts/search'
 
\app\views\posts\search.html.erb 파일 추가 후에 index.html.erb 내용 복사
 
cs



------------------------------------------------------------------------------------------------------------------------------------------------------


번외


시간 알려주기.

1) application.rb 에 config.time_zone 주석 풀고 seoul 걸기

2) 원하는 출력부에 <%= time_ago_in_words(@post.created_at)%> ago 코드 추가