[ransack(gem)] Rails 응용 프로그램에서 여러 보기에서 사용하는 검색 기능

7414 단어 ransackRubyRails
블로그 안 한지 오래됐어요.
마침 2주 전 학교 과제인 한 프리마 사이트의 복제 앱을 완성해 지금까지 필사적으로 개인 앱을 만들었다.
지식을 많이 쌓았나요?나는 앞으로도 취직 활동이 있을 것이라고 생각해서 블로그를 다시 쓰고 싶다.
오늘은 Gem ransack에 관한 거예요.

ransack 소개


rails의 검색 기능을 실현하는 데 사용되는gem입니다.
아주 쉽다.
설치가 간단해 현장에서도 쉽게 선정된다.
참고로 다음 기술서에 기재되어 있습니다.이 책은 현장에서 자주 사용하는 기술을 선택했다.
https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227

사용법


그럼 본론.
우선 평소와 같이gemfile에 기술합니다.
gem 'ransack' 
그리고 종착역 bundle에서.
bundle
지금부터 컨트롤러에 ransack을 설정하기 전에
이번 구상은 제목에 검색 형식을 넣는 것이다.
머리글을 사용하는 페이지는 첫 페이지, 검색 결과 페이지, 발언 상세 정보 페이지에 사용됩니다.
그러니까 동작이 세 개라는 거야.index,seavech,show 동작은 각각 ransack 설정을 씁니다.
참고로 외관은 이렇습니다.참고로 이것은 내가 만든 응용 프로그램이다.

색인 페이지



페이지 정보



책장



컨트롤러 설정


특히 제대로 설정해야 하는 건 서치 액션, 서치 액션부터다.
갑작스러운 결론이지만 내 상황은 이렇다.
gears_controller.rb
def search
  @search = Gear.search(search_params)
  @gear = @search.result(distinct: true).order(created_at: 'DESC').page(params[:page]).per(10)  
end

def search_params
  params.require(:q).permit(:gearname_or_title_or_review_cont)
end

검색을 수행할 때


1:우선 검색params


params에서 q키의 값을 원하기 때문에 Require (: q) 를 씁니다.
binding.프라이 같은 거 해봐.
필요한 가치:gearnameor_title_or_review_콘텐츠니까 퍼미티지.
길지만 뷰로 설명할게요.

2:Gear.search(search_params)


방금 얻은 검색.prams를 사용하여 Gear 테이블에서 읽어들입니다.
찾은 값을 @search로 변경합니다.

3:@search.result(distinct: true).order(created_at: 'DESC').page(params[:page]).per(10)


@search에서 대상화된 변수를 실례 변수@gear로 변경한다.
이 값@gear을 뷰에 전달합니다.


대응하는 보기는 이런 느낌이다.
머리글을 부분 템플릿으로 나누고 모든 작업에서 다음 haml을 읽습니다.
어쨌든 공통적이에요.
_header.html.haml
.main-header-wrapper
  = search_form_for @search, url: gears_search_path, class: 'container-fluid shadow' do |f|
    .main-header.row.mx-2.py-3.align-self-center
      =link_to root_path, class: 'main-header__logo h4 col-lg-2 col-md-3 col-sm-4 col-6 text-left align-self-center mb-0' do
        MyNewGear

    .main-header__search.col-lg-7.align-self-center.mt-2.mt-lg-0.ml-lg-3
      =  f.search_field :gearname_or_title_or_review_cont, class: 'form-control', placeholder: 'キーワードを入力' 

ransack에서form_for라는 조수를 사용하세요.여기@search를 모델로 지정합니다.
그것=f.search기술필드.이렇게 하면 평소와 같이 형식을 형성할 수 있다.
마지막:gearnameor_title_or_review_cont의 기술.
이것은 열과 검색 조건을 지정합니다.
Gear표의gearnaem열이나 title열이나review열에 텍스트가 포함된 내용 (cont) 을 검색 대상으로 합니다.라는 뜻이다.
cont 같은 거!이런 느낌이야.하지만 이 기술도 중요하다.용서해 주세요.

index 및 Show 사용


여기 와서 검색 기능 설정은 거의 끝났어요.
다만, index와 show 동작의 설정이 필요합니다.디렉터에 다음을 추가하십시오.
gears_controller.rb

before_action :set_search, only: [:index, :show]

    def set_search
      @search = Gear.ransack(params[:q])
    end

공식 문서에도 기재되어 있지만 이 기술이 없으면 Params는 ransack을 지원하지 않는 것 같습니다.
마지막으로 기록한 바와 같이 기본적으로 검색은 대부분 첫 페이지부터 진행되기 때문에 index 동작도 처음부터 설정된 것이 있다고 생각합니다.

좋은 웹페이지 즐겨찾기