[ransack(gem)] Rails 응용 프로그램에서 여러 보기에서 사용하는 검색 기능
마침 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 동작도 처음부터 설정된 것이 있다고 생각합니다.
Reference
이 문제에 관하여([ransack(gem)] Rails 응용 프로그램에서 여러 보기에서 사용하는 검색 기능), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/prkrsign890/items/e4ca908382eea10aef03텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)