Rails에서 검색 기능(전체 일치와 부분 일치 등 select 상자를 넣고 여러 모델에서 검색할 수 있음)

비망록으로서 가능한 한 자신이 이해하는 범위 내에서 생각의 순서 등을 기재한다.
rails를 터치하는 것은 몇 주이기 때문에 초보자를 위한 것이다
익숙한 사람이나 똑똑한 사람이면 그런 걸 안다고 말할 정도다.
틀리면 알려주세요.
devise에 로그인 기능이 추가되었습니다.
사용자 모델과 북 모델을 만들고 있습니다.
검색 양식에 로그인한 경우 모든 페이지에 표시하고 싶습니다
app/views/layouts/application.html.eb의view에 쓰세요.

<% if user_signed_in? %>

   <%= form_tag(search_path, method: :get) do %>

  <%= select_tag 'range' ,options_for_select([['---選択してください---', ''], ['User', '1'], ['Book', '2']]) %>

     <%= select_tag 'search', options_for_select([["前方一致","forward_match"], ["後方一致","backward_match"], ["完全一致","perfect_match"], ["部分一致","partial_match"]]) %>
     <%= text_field_tag (:word) %>
     <%= submit_tag "検索" %>

   <% end %>

<% end %>
전체
<%= form_tag(search_path,method:get)do%> 및 <%end%>
검색 동작에서 params를 건너뛰면 "range", "search", (:word)
<%= select_tag 'range' ,options_for_select([['---選択してください---', ''], ['User', '1'], ['Book', '2']]) %>
이것은 "사용자"를 선택한 경우 "1"의 사용자(드롭다운 목록)
"1"을 "range"라는 파라미터에 넣고 컨트롤러로 날아가기 위해 씁니다.
<%= select_tag 'search', options_for_select([["前方一致","forward_match"], ["後方一致","backward_match"], ["完全一致","perfect_match"], ["部分一致","partial_match"]]) %>
이것도 하단 목록에서 선택할 수 있습니다.
"전방 일치"를 선택한 후 "forward_match"를 "search"라는 파라미터에 넣고 검색 컨트롤러로 날아가기 위해 씁니다.
이 두 코드는 선택 상자를 만드는 데 쓰인다
select_tag'params는 여기에 쓰기로 했어요', options_for_select
params 이름은 뭐든지 좋아요.
<%= text_field_tag (:word) %>
검색 폼에 입력한 글자를word라는 파라미터에 넣고 위와 같이 검색 컨트롤러로 날아가기 위해 쓴 것입니다.
즉, 나는 세 개의 파라미터가 검색 컨트롤러로 날아갈 수 있도록 코드를 썼다.

이런 느낌이 들어요.
이어서 Searches 컨트롤러를 쓰세요.
 
class SearchesController < ApplicationController

     def search
       @range = params[:range]
       search = params[:search]
       word = params[:word]

      if @range == '1'
          @user = User.search(search,word)
      else
        @book = Book.search(search,word)
      end
     end
  end
보기 페이지에서 건너뛴 3개의params를 각각 실례 변수나 국부 변수에 넣기 위해
@range = params[:range]
search = params[:search]
word = params[:word]
썼어.
검색과word를 국부 변수로 하는 것은 모델의 방법(이번에는 사용자 모델과Book 모델)에서 사용되기 때문에 실례 변수가 아니어도 된다.
    if @range == '1'
      @user = User.search(search,word)
       else
       @book = Book.search(search,word)
       end
사용자가 1을 선택한 경우
@userview 페이지에 반영, 2 선택 후@book 반영된 조건 지점.
여기 있습니다.검색 (search,word) 이라는 검색 방법을 정의해야 합니다.
이것은 모델에서 정의된 것입니다.
모델 정보
다음은 모델에서 검색 방법을 정의하는 부분입니다.
리본에서 를 클릭합니다.
사용자 모델에서 검색 방법을 쓰고 검색 컨트롤러로 호칭합니다.
app/models/user.rb

def self.search(search,word)
          if search == "forward_match"
                           @user = User.where("name LIKE?","#{word}%")
          elsif search == "backward_match"
                           @user = User.where("name LIKE?","%#{word}")
          elsif search == "perfect_match"
                           @user = User.where("#{word}")
          elsif search == "partial_match"
                           @user = User.where("name LIKE?","%#{word}%")
          else
                           @user = User.all
           end
  end

이 작법은 꼬르륵 나오는 것을 모방했다.
주의사항은 자신이 정의한 (search,word)params 두 개를 쓰는 것입니다
search는view 페이지에 썼습니다.
"forward_match"와 "backward_match"가 들어왔습니다.
검색 테이블에 사용자가 넣은 글자가 있습니다.
User.where("name LIKE?","#{word}%")
이 코드는 사용자 모델에서 검색자를 명중시킬지 확인하는 코드입니다.
name 사용자 테이블의 열 이름을 설명합니다.
이름으로 검색한 것 같아서name
그런 다음 사용자 Book을 선택할 때의 방법을 Book 모델에 씁니다.

def self.search(search, word)
        if search == "forward_match"
                        @book = Book.where("title LIKE?","#{word}%")
        elsif search == "backward_match"
                        @book = Book.where("title LIKE?","%#{word}")
        elsif search == "perfect_match"
                        @book = Book.where("#{word}")
        elsif search == "partial_match"
                        @book = Book.where("title LIKE?","%#{word}%")
        else
                        @book = Book.all
        end
end

사용자 모델과 동일한 쓰기 사용
그리고 검색 결과를 표시하는view 페이지를 만듭니다.
이번 검색 폴더에는 검색이 있습니다.index.html.erb를 만들었으니까.
routes.에 있다
get 'search' => 'searches#search'
동적 관찰을 할 때의 축심점.
이어서
search.html.에 대해
<h2>Results index</h2>
<!--books一覧 -->
<table class="table table-hover table-inverse">
 <% if @range == '2' %>
  <thead>
    <tr>
     <th></th>
     <th>Title</th>
     <th>Opinion</th>
     <th colspan="3"></th>
    </tr>
  </thead>


  <tbody>
     <% @book.each do |book| %>
     <tr>
      <td>
       <%= link_to(book.user) do %>
       <%= attachment_image_tag(book.user, :profile_image, :fill, 50, 50, fallback: "no-image-mini.jpg") %>
       <% end %>
      </td>
      <td>
       <%= link_to book.title, book, class: "book_#{book.id}" %> 
      </td>
      <td><%= book.body %></td>
     </tr>
     <% end %>
  </tbody>

  <% else %>
  <thead>
     <tr>
      <th>image</th>
      <th>name</th>
      <th colspan="3"></th>
     </tr>
   </thead>

   <tbody>
    <% @user.each do |user| %>
     <tr>
      <td><%= attachment_image_tag(user, :profile_image, :fill, 50, 50, fallback: "no-image-mini.jpg") %></td>
      <td><%= user.name%></td>
      <td><%= link_to "Show", user, class: "user_#{user.id}" %></td>
     </tr>
    <% end %>
   </tbody>
   <% end %>
 </table>

끝날 때
이상은 검색 기능의 실시 방법이다.
궁금한 점, 궁금한 점 있으시면 질문, 댓글!!!

좋은 웹페이지 즐겨찾기