Rails ransack 검색 기능 사용

8434 단어 ransackRails

개시하다


ransack을 사용하여 검색 기능을 실현합니다.
ransack의 코드는 매우 적고 복잡한 검색 기능을 간단하게 제작할 수 있어 매우 편리하다.
이 글https://qiita.com/nakanishi03/items/2a6dbd72f9793b7e0ce4
라는 후속 보도를 했다.당신도 한번 보셨다면 저는 더욱 깊이 이해할 것입니다.
읽을 수 있었으면 좋겠어요. 즐거웠을 거예요!!!힘이 되다!!!

ransack 설치


Gemfile에 ransack, bundle install을 추가합니다.
Gemfile
gem 'ransack'
단말기
bundle install

matcher 목록


ransack에서 만든 폼에는 특수한 검색 일치 키워드(이하 Marcher)가 존재합니다.
나는 그 목록의 일부분을 총결하였으니 참고하시오.
matcher

*_eq
대등
*_not_eq
같지 않다
*_in
일치하는 그룹의 임의의 값
*_lteq
이하
*_gteq
이상
*_start
~ 로 시작하다
모든 명세서를 참조하고 싶은 사람은 아래를 보세요.
https://github.com/activerecord-hackery/ransack/blob/master/lib/ransack/locale/en.yml#L15

창 만들기


이번에는 ① 정렬 ② 이름 검색 ③ 가격 검색 ④ 상태 검색 ⑤ 발송 버튼
의 5부 구성.
학급 명칭 등은 마음대로 바꾸고 취향에 따라 결정하세요.
.detail_search
  = search_form_for(@q,url: searches_detail_search_path) do |f|
    .detail_search_sort
      = f.select( :sorts, { '並び替え': 'id desc', '価格の安い順': 'price asc', '価格の高い順': 'price desc', '出品の古い順': 'updated_at asc', '出品の新しい順': 'updated_at desc' } , { onchange: 'this.form.submit()'} )
    .detail_search_form
      .detail_search__title
        %h3 詳細検索
      .detail_search__group
        .detail_search__group--label
          = fa_icon "search"
          %p キーワードを追加する
        = f.search_field :name_cont, placeholder: "例)値下げ"
      .detail_search__group
        .detail_search__group--label
          = fa_icon "search"
          %p 価格
        .detail_search__group--forms
          = f.search_field :price_gteq, placeholder: "¥ Min"
          %p 〜
          = f.search_field :price_lteq, placeholder: "¥ Max"
      .detail_search__group
        .detail_search__group--label
          = fa_icon "search"
          %p 商品の状態
        .detail_search__group--checkbox
          %label
            %input{type: "checkbox"}
            = 'すべて'
        .detail_search__group--checkbox
          %label
            = f.check_box :state_in, '1', nil
            = '新品、未使用'
        .detail_search__group--checkbox
          %label
            = f.check_box :state_in, '2', nil
            = '未使用に近い'
      .detail_search__btns
        .detail_search__btn--grey
          = link_to "クリア", "/searches",type: "button"
        = f.submit "完了"

이런 느낌이에요.
입력한 값은 searches#detail-입니다.검색에 보내도록 설정합니다.여기도 적당히 바꿔주세요.

컨트롤러 설정


searches_controller.rb
class SearchesController < ApplicationController
  before_action :set_ransack

  def detail_search
    @search_product = Product.ransack(params[:q]) 
    @products = @search_product.result.page(params[:page])
  end

private


  def set_ransack
    @q = Product.ransack(params[:q])
  end

end
이 정도면 됐어.
params의 값은 산열 형식으로 발송됩니다.
만약 가격을 잘 얻지 못한다면, 가격을 받아들이는 방법을 바꾸어 보세요.
그것을 실례 변수에 대입하면 된다.

검색 결과 표시


searches/detail_search.html.haml

以下はあくまで一例です。
適宜変更してください。

= render 'shared/header'
= render 'shared/sell-btn'
.search
  .search-container
    .search-left
      = render 'searches/form-bar'
    .search-right
      %section.items-box-container
        -if @search.present?
          %h2.search-result-head
            =@search
            %span.search-result-head-text
              の検索結果
          .search-result-number
            ="1-#{@products.count}件表示"
        -else
          %h2.search-result-nil
            検索結果
          .search-result-number
            ="1-#{@products.count}件表示"
        .items-box-content
          = render @products
= render 'shared/footer'
0~600엔으로 검색해 봤어요.
잘했네.

끝맺다


간단하네.
혹시 모르는 게 있으면 댓글로 대답해 주세요!!

좋은 웹페이지 즐겨찾기