키워드 검색과 탭 검색을 전환하고 싶습니다!

12781 단어 RubyRails

구현된 검색 기능

  • 키워드 검색
  • 태그 검색
  • 전제 조건


    Rails 4.2
    경로
    search_products GET    /products/search(.:format)  products#search
                    POST   /products/search(.:format)  products#search
    

    키워드 검색 정보



    이런 느낌.

    태그 검색 정보



    사용한gem 정보


    Ransack 1.8.8

    Ransack이 편하대요.


    Ransack을 사용하기 전에 다음 Where 메서드와 LINE 등을 사용하여 키워드 검색을 수행했습니다.
    product.rb
      def self.search(keyword)
        if keyword
          Product.where(['name LIKE?', "%#{keyword}%"])
        else
          Product.all
        end
      end
    
    하지만 랜스백이라는 젬을 사용하면 단 한 문장만 쓰면 가능하다.
    gem 'ransack'
    
    product_controller.rb
      def search
        # キーワード検索
        @search = Product.ransack(params[:q])
        @results = @search.result.order("created_at DESC").page(params[:page]).per(10)
    
        # タグ検索
        @tag_search = Product.tagged_with(params[:search])
      end
    
    ransack 이 방법과 매개 변수의 지정을 통해 키워드 검색 결과를 되돌려 주는 것 같습니다.
    http://nekorails.hatenablog.com/entry/2017/05/31/173925
    ↑ 보살핌을 받은 사이트.
    태그 검색 중,taggedwith 이 방법 + 검색 라벨을 매개 변수로 사용하면 대상 라벨의 트위터를 잘 얻을 수 있습니다.
    search.html.erb
    <div class="container">
      <div class="row">
        <div class="col s12">
          <ul class="tabs">
               <!--materialize.cssを用いてキーワード検索とタグ検索を切り替え-->
            <li class="tab col s6"><a href="#test1">キーワード検索</a></li>
            <li class="tab col s6"><a href="#test2">タグ検索</a></li>
          </ul>
          <!--キーワード検索-->
          <div id ="test1" >
                <!--Ransackを使うとsearch_form_forを使える!-->
            <%= search_form_for @search,url: search_products_path do |f| %>
    
              <div class="form-group">
                <i class="material-icons prefix">search</i>
                <%= f.search_field :name_cont, class: 'form-control', placeholder: 'キーワードで検索' %>
                <%= f.submit 'Search',:class=> "btn waves-effect waves-light" %>
              </div>
            <% end %>
          <!--キーワード検索の結果を表示-->
            <div class="col s6">
              <div class="card" id = "test1">
                <div class="blue-grey darken-1">
                  <ul class="card">
                    <% @results.each do |result| %>
                      <%= render 'products/product' , a_product: result %>
                      </ul>
                      <% end %>
                  </div>
                </div>
              </div>
            </div>
          </div>
    
        <!--タグ検索-->
          <div id ="test2">
            <div class="form-group">
            <i class="material-icons prefix">search</i>
            <!--タグはform_tagを用いて-->
            <%= form_tag({action: 'search', method: "get"}) do %>
              <%= text_field_tag :search %>
              <%= submit_tag 'Search', :class =>  "btn waves-effect waves-light" %>
            <% end %>
            </div>
                   <!--タグ検索の結果を表示-->
            <div class="col s6">
              <div class="card" id = "test1">
                <div class="blue-grey darken-1">
                  <ul class="card">
                    <% @tag_search.each do |result| %>
                      <%= render 'products/product' , a_product: result %>
                      </ul>
                    <% end %>
               </div>
              </div>
            </div>
            </div>
         </div>
        </div>
      </div>
    </div>
    
    Ransack search 기준form_for+@search를 사용할 수 있습니다(키워드가 포함된 매개변수의 인스턴스).form_개념적으로 for에 가깝다.
    태그 검색에서form태그를 사용했습니다.이것은 라벨 이름만 포함하면 충분하다.(특별히 새로운 실례를 준비하여 form for에서 던지지 않아도 되죠...)[혼잣말]

    끝맺다


    form_for의 매개 변수 실례,find,where 등 방법을 얻을 때의 유형에 대한 이해가 부족하여 많은 시간이 걸렸다.매개 변수와 방법을 다시 배워야 할지도 모른다.

    좋은 웹페이지 즐겨찾기