scope와where 방법으로 자신 이외의 사용자를 검색하고 싶습니다

8044 단어 RailsRubytech

하고 싶은 일


사용자를 검색할 때, 자신(로그인한 사용자)이 검색 대상 이외에 없기를 바랍니다
  • 사용자 이름 "전중"으로 로그인
  • '전중'이라는 키워드로 검색
  • 검색 결과 자신 이외의'전중'만 발견
  • 배경 및 개발 환경


    개발 중인 응용 소프트웨어에 대해 추적 기능을 실시하였다.
    추적 단추는 사용자의 세부 페이지에 있습니다.따라서 다른 사용자를 주목하려면 그 사용자의 상세한 페이지로 이동해야 한다.
    따라서 사용자 이름으로 검색한 다음 관심 있는 사용자를 찾습니다.
    그 검색 결과에 자신을 드러낼 필요가 없다. 늘 외관도 좋지 않다고 느낀다.
    다음은 개발 환경입니다. 참고만 하겠습니다.
    Ruby 3.3.3
    Ruby on Rails 7.0.2

    시도 및 오류


    User 모델에서 scope와where 방법을 통해 검색 대상의 사용자를 한정한 후
    Users 컨트롤러로 검색 방법을 만들어 보세요.
    어??오류 발생
    エラーイメージ
    ArgumentError in UsersController#search
    wrong number of arguments (given 0, expected 1)
    
    당신에게 건네준 파라미터가 없습니다!이렇게 혼났어요.

    오류 원인


    컨트롤러에 파라미터가 지정되지 않았기 때문입니다.
    수정 후 동작 좋아요!
    수정 전
      def search
        @search_friends = User.others.search(params[:keyword])
      end
    
    수정 후
      def search
        @search_friends = User.others(current_user).search(params[:keyword])
      end
    

    최종 코드


    models/user.rb
    class User < ApplicationRecord
      #省略
        # ユーザー検索
      def self.search(search)
        User.where('user_name LIKE(?)', "%#{search}%") if search != ''
      end
    
      # ユーザー検索範囲から対象ユーザーを除く
      scope :others, ->(user) { where.not(id: user.id) }
    end
    
    controllers/users_controller.rb
    class UsersController < ApplicationController
      #省略
      def search
        @search_friends = User.others(current_user).search(params[:keyword])
      end
    end
    
    routes.rb
    Rails.application.routes.draw do
      #省略
      resources :users, only: [:show, :index] do
        collection do
          get 'search'
        end
      end
    end
    
    views/users/search.html.erb
    <%= form_with(url: search_users_path, local: true, method: :get) do |form| %>
      <%= form.text_field :keyword, placeholder: "ユーザーを探す" %>
    <% end %>
    
    현재 자신을 제외한 모든 사용자가 검색 대상에 포함됐지만, 서로 상태를 주시하는 사용자들도 검색 대상에서 제외할지 논의하고 있다.이런 상황에서도 매개 변수에 추가하면 금방 이루어질 것 같아요.

    참고 자료


    https://pikawaka.com/rails/where
    https://qiita.com/hapiblog2020/items/6c2cef49df5616da9ae3

    좋은 웹페이지 즐겨찾기