Rails 검색 기능 구현

10044 단어 RubyRails

입문


이번에는 검색 양식을 구현했습니다.
이번에 검색 기사의 제목을 설치하면 지정된 키워드로 기사를 검색할 수 있다

실시


routes


이번에는 "collection"을 사용합니다.
데이터를 확인하려면 "member"를 사용하십시오.
"member"를 사용하여 루트를 "id"로 추가합니다.
이렇게 기술했습니다.↓
또한 이 동작을 이동할 때 파라미터에서':id'를 수신하려면 member 를 사용하십시오
collection을 사용하여 작업을 추가합니다. 특히 특정 페이지에 id를 지정할 필요가 없습니다.
Rails에 대해 알아봤습니다: routes.rbcollection과 member를 깊이 있게 이해하다
그리고 다른 참고는 여기입니다.
Rails 학습 라우팅 ②
rails Guide
config/routes.rb

 resources :albums do
    collection do
      get 'search'
    end
  end

controller


컨트롤러는 "search"방법을 사용합니다. "(params[:keyword])"라고 설명합니다.
허용: keyword.
controllers/albums_controller.rb

  def search
    @albums = Album.search(params[:keyword])
  end  

models


여기에는 검색 내용이 지정되어 있습니다.
Where 방법과 LIKE는 이전에 배운 적이 있다.자세한 내용
LIKE 사용
LIKE를 사용해도 특별한 기호를 사용할 수 있습니다.
백분율 - 임의의 문자열(빈 문자열 포함)(하나의 문자보다 크거나 같음)
「 _ 」밑줄 기호 - 모든 문자
[MySQL] 데이터 검색 수행
더 이해하기 쉬운 건 여기예요.
pikawaka: [Rails] where 방법으로 원하는 데이터를 얻으세요!
models/album.rb

 def self.search(search)
    if search !=""    # 空じゃなければ検索します。 
      Album.where('title LIKE(?)', "%#{search}%")
    else
      Album.all
    end
  end

views


"form_with"를 사용하여 검색 섹션을 만듭니다.
text_field 섹션 설명: keyword.
 
라우팅을 시작할 때 이렇게 설정합니다.

controller 부분에서 말한 바와 같이 보내면
':keyword'(검색하고 싶은 단어)params에 들어가기
where 방법으로 검색하기
URL 섹션의 "search_albums_path"로 전송됩니다.
views/pics/index.html.erb


     <%= form_with(url: search_albums_path, local: true, method: :get, class: "search-form") do |f| %>
       <div class="search-inside">
         <%= f.text_field :keyword, placeholder: "記事を検索する", class: "search-box" %>
       </div>
       <div class="search-inside">
         <%= f.submit "検索", class: "search-btn btn" %>
       </div>
     <% end %>


검색 부분은 이런 느낌입니다.
CSS 섹션은 생략했지만 취향에 맞게 꾸몄습니다.

표시된 부분은 이렇게 기술되어 있다.
views/albums/search.html.erb


     <% @albums.each do |album| %>
       <li class="list">
         <%= link_to album_path(album) do %>
           <div class="pic-img-content">
             <%= image_tag album.image, class: "pic-img" if album.image.attached? %>
           </div>
           <div class="pic-info">
             <div class="pic-title">
               <p><%= album.created_at %></p>
               <h3><%= album.title %></h3>
             </div>
             <div class="pic-text">
               <div class="text-box">
                 <p><%= album.text %></p>
               <div>
             </div>
           </div>
         <% end %>
       </li>
     <% end %>

준비한 것이 드러났다

총결산


시간이 좀 걸렸지만 순조롭게 설치되었습니다.
다음에 나는 좀 일찍 다른 것을 만들고 싶다

좋은 웹페이지 즐겨찾기