아직 검색 기능의 구현에 소모되고 있습니까? 순간에 구현할 수 있는 Gem 'ransack'

안녕하세요,

이번에는 검색 기능을 폭속으로 구현할 수 있는 Gem

Ransack



입니다.

아니 - 이것은 굉장히 편리합니다.
검색 기능은 자연스럽게 높아?
라고 생각했지만,
이 Gem을 사용하면 30분 정도로 실현할 수 있습니다.

다시 Gem 굉장하다는 느낌입니다.
(어휘력)

그럼 빨리 가자.

우선은
gem 'ransack'

Gemfile에 넣습니다.
% bundle install

잊지 않고

라우팅 이동
 resources :books do
    collection do
      get 'search'
    end
  end

라우팅은
         search_books GET      /books/search(.:format)                                                                  books#search


이런 느낌이 듭니다.

collection과 비슷한 것에 멤버가 있습니다.
 member do
      get 'search'
 end

로 설정하면 라우팅에 ID를 포함할 수 있습니다.
         search_books GET      /books/:id/search(.:format)                                                                  books#search


이번에는 book의 데이터베이스 안에 있는 tag_name이라는 열을 검색할 수 있도록 하고 싶기 때문에 이렇게 했습니다.

다음은 뷰를 만듭니다.
rails g controller books  search

이렇게 하면 컨트롤러와 search의 View를 만들 수 있습니다.

컨트롤러 컨트롤러♪

books_controller.rb
class BooksController < ApplicationController
  before_action :search_book, only: [:index, :search]


  def index
   @books =Book.all

   @book =Book.includes(:user)
   set_book_column 
  end


  def search
    @results = @p.result
    @book = @results.includes(:book)
  end


  private

  def search_book
    @p = Book.ransack(params[:q]) 
  end
  def set_book_column
    @book_name = Book.select("tag_name").distinct 
   end
end


이런 느낌입니다.

Book.select("tag_name").distinct

tag_name에 검색하려는 요소를 넣습니다.

before_action 넣으면
무엇보다 빨리 읽어줍니다.

다음은 View입니다!

books/index.html.reb
<%= search_form_for @p, url: search_books_path do |f| %>
    <%= f.label :tag_name_cont, 'タグ名' %>
    <%= f.text_field  :tag_name_cont, placeholder: "タグの名前で検索" %>
    <br>
    <%= f.submit '検索' %>
<% end %>

search_form_for 메소드는 ransac 특정 메소드입니다.

두 번째 줄에 쓰여진 tag_name_cont의 cont는
대체로 맞으면 검색에 걸린다.

라는 녀석입니다.

eq로 하면 똑같은 녀석밖에 걸리지 않게 됩니다.

그 밖에도 몇가지 있으므로 봐 주세요!
Ransack 추천

검색 결과 화면 만들기

books/search.html.erb
   <h1 class="search-forms">
     検索結果
   </h1>
<head class ="search-book-list">
  <div class="book-chosen">
  <%# 検索該当商品一覧 %>
   <% if @results.length !=0 %>    
    <% @results.each do |result| %>
     <br>
     <div class="sec1title">
    <div class="item-show">
          <h2 class='border01'>
            <%= result.genre.type %>
             <%= link_to "/books/#{result.id}" do %>
        <%end %>
          </h2>
        <%= image_tag result.image, id: 'slideshow' if result.image.attached? %>
        <div class="item-info" >
          <h2 id ='item-name'>
            <%= result.name %>
          </h2>
            <form class="item-content-show">
            <%= result.content %>
            </form>
        </div>
        <br />
       </div>
     </div>
    <% end %>
   <% else %>
    <br/>
   該当する商品はありません
   <br/>
   <br/>
<div>
   <%=link_to  "ホームへ戻る",root_path%>
</div>
   <% end %>
   <br>
  </div>

<%# ホームボタン %>
   <%= render "shared/sidebar" %>

 </head>

dekita!

컨트롤러에서
 def search
    @results = @p.result
    @book = @results.includes(:book)
  end

이렇게 표기하고 있기 때문에 @result
값을 꺼내고 있습니다.

이상으로 설명은 끝납니다.
환경 Ruby on rails

뭔가 실수가 있으면 언제든지 코멘트 부탁드립니다! !

좋은 웹페이지 즐겨찾기