私のRailsアプリケーションでは、Searckick(elasticsearch)で高度な検索を設定しようとしています。私がしようとしていることは次のとおりです:searchkickで高度な検索を設定し、複数のモデルとの関連付け(Rails)
- ユーザ、ロケーション、能力について検索し、常にユーザプロファイルを結果として戻すことができます。
私はこれまでユーザーに検索することができますが、これらの他のモデルでも検索する方法がわかりません。
私のルートは:
Rails.application.routes.draw do
ActiveAdmin.routes(self)
devise_for :users, controllers: {sessions: "sessions", registrations:
"registrations"}
# For details on the DSL available within this file, see
http://guides.rubyonrails.org/routing.html
root 'pages#home'
get "/news", to: 'pages#news'
get "welcome_back", to: 'pages#welcome_back'
get "/profile", to: "profile#show"
resources :profiles do
collection do
get :autocomplete
end
end
namespace :profile do
resources :locations
resources :positions
resources :competences
end
end
ユーザロケーションに属し、結合テーブルを介して複数のコンピタンスを有しています。言い換えれば、ユーザーはlocation_idを持っていて、あなたはそのユーザーが持っているusers_competencesを知るために、あなたの.competencesを呼び出すことができます。
誰でもこの検索を設定する方法を教えてもらえますか?
マイプロファイルコントローラ:
class ProfilesController < ApplicationController
def index
query = params[:search].presence || "*"
@users = User.search(query, suggest: true, operator: "or")
end
def autocomplete
render json: ["Test"]
end
end
私は私のモデルでデフ自己(検索)で動作するようにしようとしているが、これは動作しません。私が試した何
:
def self.search(search)
where(["User.first_name LIKE ?","%#{search}%"])
where(["User.last_name LIKE ?","%#{search}%"])
where(["User.competences.collect{&:name} IN ?","%#{search}%"])
joins(:location).where("location.name LIKE ?", "%#{search}%")
else
all
end
end