Для моего приложения Rails я пытаюсь настроить расширенный поиск с помощью Searckick (elasticsearch). Они делают то, что я пытаюсь сделать, это:Настройка расширенного поиска с помощью поиска, совмещение с ассоциациями с несколькими моделями (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, и вы можете вызвать .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