[ransack] 복잡한 검색 기능 구현
소개
이 기사에서는 ransack
를 사용한 복잡한 검색 기능에 대해 설명합니다.
다음 이미지와 같은 것을 만듭니다.
・「이름등」의 곳에는, 가게명이나 메뉴명등을 키워드로 검색할 수 있도록 했습니다.
・「매운맛(카라사)」에서는, ActiveHash로 하고 있는 것이 되고 있습니다.
・「close」는 관계 없기 때문에, 무시입니다.
코드
해당 부분 기재합니다.
관계 없는 곳은 省略
합니다.
컨트롤러
@q
이나 @p
등 기재 방법은 나누어집니다만, [:q]
도 있으므로,@q
에 통일했습니다.
検索パラメーター
(검색할 때 입력한 내용)의 키를,:q
이며 queryのイニシャル
입니다.
query=질문(by Google 선생님)
설명을 마치면 binding.pry
하고 검색해 보면 좋다고 생각합니다.
검색한 모든 결과를 resultメソッド
에서 @foods
로 인스턴스 변수를 생성하고 있습니다.
food_controller.rbclass FoodsController < ApplicationController
def index
(省略)
@q = Food.ransack(params[:q])
end
def search
@q = Food.ransack(params[:q])
@foods = @q.result
end
(省略)
보기
search.html.erb
검색 결과를 each 메소드로 모두 표시하고 있습니다.
또한 조건 분기에서 검색 결과가 해당되지 않는 경우,
데카 데카와 "Sorry"했습니다.
여기는 특별히 말하지 않습니다.
<div class="main">
<div class="food-contents">
<h2 class="food-contents-title">検索結果</h2>
<% if @foods.present? %>
<ul class="food-lists">
<% @foods.each do |food| %>
<li class="list">
<div class="food-img-content">
<h2 class="food-post-user">
<%= link_to user_path(food.user_id) do %>
<% if food.user.icon.present? %>
<%= image_tag food.user.icon, class: "icon-img" %>
<% else %>
<i class="fas fa-user-circle"></i>
<% end %>
<%= food.user.nickname %>
<% end %>
</h2>
<%= link_to food_path(food) do %>
<%= image_tag food.image, class: "food-img" if food.image.attached? %>
<div class="food-img-info">
<h2 class="shop-name">
<%= food.shop_name%>
</h2>
<h2 class="food-name">
<%= food.food_name%>
</h2>
</div>
<% end %>
</div>
</li>
<% end %>
</ul>
<% else %>
<div class="non">
<h2 class="non-title">SORRY...</h2>
</div>
<% end %>
</div>
</div>
フォームのerbファイル
여기 몇 시간 동안 고민했습니다.
여러 열의 한 양식에서 검색할 수 있도록 하려면_or_
를 붙여야 합니다.
이것을 붙이지 않고 컬럼 사이에 :
ArgumentError
가 나온다고 생각합니다.
메소드의 인수가 올바르지 않을 때나 수가 많거나, 적을 때에 발생하는 에러군요.
collection_select의 인수 정보
第一引数(メソッド名)
・컬럼명이나 name 속성이나 id 속성을 결정
第二引数(オブジェクト)
· 배열 데이터 지정
· ActiveHash
그래서, 여기를 인스턴스 변수라고 하면 오류 지옥이 됩니다. (떨림)
이번에는 SpicyLevel.all
입니다.
第三引数(value)
표시 할 때 참조하는 DB의 열 이름
第四引数(name)
실제로 표시되는 열 이름
オプションinclude_blank
아무것도 선택하지 않을 때 표시되는 내용
(이번에는 "--"로하고 있습니다.)
그들을 근거로 아래 코드입니다.
나는 여기서 form_with
와 사요나라 하게 되었습니다.
갑자기 ransack에서 검색 기능 구현하고 있는 강자는, 만나도 안 된다고 생각합니다만.
<%# form_with、さよなら %>
<%= search_form_for @q, url: search_foods_path, class: "food-search", id:"pull-down" do |f| %>
<%= f.label :shop_name_or_shop_name_kana_or_food_name_or_station_cont, '名前など' %>
<%= f.text_field :shop_name_or_shop_name_kana_or_food_name_or_station_cont, placeholder: "TYPE A KEYWORD" %>
<%= f.label :spicy_level_id_eq, '辛さ' %>
<%= f.collection_select :spicy_level_id_eq, SpicyLevel.all, :id, :name, include_blank: '--' %>
<%= f.submit "SEARCH" %>
<% end %>
이상입니다.
어떻습니까?
끝에
꽤 힘들었고 이것을 구현하는 데 8 시간이 걸렸습니다. 😇
그러나, 실장할 수 있었을 때는 역시 기분 좋네요.
정보화 사회의 세상에서, 검색이 불충분한 어플리케이션은 나는 미묘하지 않을까 생각했기 때문에,
망설이지 않고 노력했습니다.
또한,
다른 사이트를 보면 seed 파일을 사용하는 분이 있었습니다만,
나는 사용하지 않았다.
글쎄, 좋은가?
이하 이번 참고 사이트입니다.
Pikawaka라는 사이트는 정말 알기 쉽고 대단하다고 생각합니다.
Rails에서 rake db : seed 다시 시도
【Rails】 ransack을 사용하여 검색 기능이있는 앱을 만들자!
gem의 ransack에서 여러 열을 검색 대상으로 만드는 방법
【Rails】ransack의 사용법을 정리해 보았다
【Rails】 검색 기능의 구현 순서
[rails]ransack을 사용한 검색 기능
[Rails]ransack을 이용한 다양한 검색 폼 작성 방법 정리
Rails db:seed 이중 등록 해제
rails seed를 쓰는 방법 다양한
내일도 최선을 다하겠습니다! !
Reference
이 문제에 관하여([ransack] 복잡한 검색 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mkato1013/items/069ea4330a10a62b8d6b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
해당 부분 기재합니다.
관계 없는 곳은
省略
합니다.컨트롤러
@q
이나 @p
등 기재 방법은 나누어집니다만, [:q]
도 있으므로,@q
에 통일했습니다.検索パラメーター
(검색할 때 입력한 내용)의 키를,:q
이며 queryのイニシャル
입니다.query=질문(by Google 선생님)
설명을 마치면
binding.pry
하고 검색해 보면 좋다고 생각합니다.검색한 모든 결과를
resultメソッド
에서 @foods
로 인스턴스 변수를 생성하고 있습니다.food_controller.rb
class FoodsController < ApplicationController
def index
(省略)
@q = Food.ransack(params[:q])
end
def search
@q = Food.ransack(params[:q])
@foods = @q.result
end
(省略)
보기
search.html.erb
검색 결과를 each 메소드로 모두 표시하고 있습니다.또한 조건 분기에서 검색 결과가 해당되지 않는 경우,
데카 데카와 "Sorry"했습니다.
여기는 특별히 말하지 않습니다.
<div class="main">
<div class="food-contents">
<h2 class="food-contents-title">検索結果</h2>
<% if @foods.present? %>
<ul class="food-lists">
<% @foods.each do |food| %>
<li class="list">
<div class="food-img-content">
<h2 class="food-post-user">
<%= link_to user_path(food.user_id) do %>
<% if food.user.icon.present? %>
<%= image_tag food.user.icon, class: "icon-img" %>
<% else %>
<i class="fas fa-user-circle"></i>
<% end %>
<%= food.user.nickname %>
<% end %>
</h2>
<%= link_to food_path(food) do %>
<%= image_tag food.image, class: "food-img" if food.image.attached? %>
<div class="food-img-info">
<h2 class="shop-name">
<%= food.shop_name%>
</h2>
<h2 class="food-name">
<%= food.food_name%>
</h2>
</div>
<% end %>
</div>
</li>
<% end %>
</ul>
<% else %>
<div class="non">
<h2 class="non-title">SORRY...</h2>
</div>
<% end %>
</div>
</div>
フォームのerbファイル
여기 몇 시간 동안 고민했습니다.여러 열의 한 양식에서 검색할 수 있도록 하려면
_or_
를 붙여야 합니다.이것을 붙이지 않고 컬럼 사이에
:
ArgumentError
가 나온다고 생각합니다.메소드의 인수가 올바르지 않을 때나 수가 많거나, 적을 때에 발생하는 에러군요.
collection_select의 인수 정보
第一引数(メソッド名)
・컬럼명이나 name 속성이나 id 속성을 결정第二引数(オブジェクト)
· 배열 데이터 지정·
ActiveHash
그래서, 여기를 인스턴스 변수라고 하면 오류 지옥이 됩니다. (떨림)이번에는
SpicyLevel.all
입니다.第三引数(value)
표시 할 때 참조하는 DB의 열 이름第四引数(name)
실제로 표시되는 열 이름オプションinclude_blank
아무것도 선택하지 않을 때 표시되는 내용(이번에는 "--"로하고 있습니다.)
그들을 근거로 아래 코드입니다.
나는 여기서
form_with
와 사요나라 하게 되었습니다.갑자기 ransack에서 검색 기능 구현하고 있는 강자는, 만나도 안 된다고 생각합니다만.
<%# form_with、さよなら %>
<%= search_form_for @q, url: search_foods_path, class: "food-search", id:"pull-down" do |f| %>
<%= f.label :shop_name_or_shop_name_kana_or_food_name_or_station_cont, '名前など' %>
<%= f.text_field :shop_name_or_shop_name_kana_or_food_name_or_station_cont, placeholder: "TYPE A KEYWORD" %>
<%= f.label :spicy_level_id_eq, '辛さ' %>
<%= f.collection_select :spicy_level_id_eq, SpicyLevel.all, :id, :name, include_blank: '--' %>
<%= f.submit "SEARCH" %>
<% end %>
이상입니다.
어떻습니까?
끝에
꽤 힘들었고 이것을 구현하는 데 8 시간이 걸렸습니다. 😇
그러나, 실장할 수 있었을 때는 역시 기분 좋네요.
정보화 사회의 세상에서, 검색이 불충분한 어플리케이션은 나는 미묘하지 않을까 생각했기 때문에,
망설이지 않고 노력했습니다.
또한,
다른 사이트를 보면 seed 파일을 사용하는 분이 있었습니다만,
나는 사용하지 않았다.
글쎄, 좋은가?
이하 이번 참고 사이트입니다.
Pikawaka라는 사이트는 정말 알기 쉽고 대단하다고 생각합니다.
Rails에서 rake db : seed 다시 시도
【Rails】 ransack을 사용하여 검색 기능이있는 앱을 만들자!
gem의 ransack에서 여러 열을 검색 대상으로 만드는 방법
【Rails】ransack의 사용법을 정리해 보았다
【Rails】 검색 기능의 구현 순서
[rails]ransack을 사용한 검색 기능
[Rails]ransack을 이용한 다양한 검색 폼 작성 방법 정리
Rails db:seed 이중 등록 해제
rails seed를 쓰는 방법 다양한
내일도 최선을 다하겠습니다! !
Reference
이 문제에 관하여([ransack] 복잡한 검색 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mkato1013/items/069ea4330a10a62b8d6b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([ransack] 복잡한 검색 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mkato1013/items/069ea4330a10a62b8d6b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)