对于我的 Rails 应用程序,我正在尝试使用 Searckick (elasticsearch) 设置高级搜索。我想做的事情是:
- 可以搜索用户、位置和能力,并始终将用户配置文件作为结果返回。
到目前为止,我已经修复了它,我可以搜索用户,但我不确定如何也能够搜索这些其他模型。
我的路线:
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,你可以调用一个用户的 .competences 来查看用户有哪些 users_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),但这不起作用。
我尝试了什么:
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