scope와where 방법으로 자신 이외의 사용자를 검색하고 싶습니다
하고 싶은 일
사용자를 검색할 때, 자신(로그인한 사용자)이 검색 대상 이외에 없기를 바랍니다
배경 및 개발 환경
개발 중인 응용 소프트웨어에 대해 추적 기능을 실시하였다.
추적 단추는 사용자의 세부 페이지에 있습니다.따라서 다른 사용자를 주목하려면 그 사용자의 상세한 페이지로 이동해야 한다.
따라서 사용자 이름으로 검색한 다음 관심 있는 사용자를 찾습니다.
그 검색 결과에 자신을 드러낼 필요가 없다. 늘 외관도 좋지 않다고 느낀다.
다음은 개발 환경입니다. 참고만 하겠습니다.
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.rbclass UsersController < ApplicationController
#省略
def search
@search_friends = User.others(current_user).search(params[:keyword])
end
end
routes.rbRails.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 %>
현재 자신을 제외한 모든 사용자가 검색 대상에 포함됐지만, 서로 상태를 주시하는 사용자들도 검색 대상에서 제외할지 논의하고 있다.이런 상황에서도 매개 변수에 추가하면 금방 이루어질 것 같아요.참고 자료
Reference
이 문제에 관하여(scope와where 방법으로 자신 이외의 사용자를 검색하고 싶습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/furum/articles/2288695db991a0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)