Я пробую этот урок: https://medium.com/manato/chewy-gem-with-active-model-serializers-in-ruby-on-rails-5-2-3-a6f88e0330b5
Однако я столкнулся с некоторыми проблемами. Мое приложение rails не может найти индексы эластичного поиска плавно.
Когда я выполняю запрос из браузера, в браузере возникает следующая ошибка:
uninitialized constant UsersController::UsersIndex Did you mean? UserIndex
Затем я go переведу на свой контроллер и изменит метод UsersIndex на UserIndex.
class UsersController < ApplicationController
def search
@users = UserIndex.query(query_string: { fields: [:name, :email, :phone], query: search_params[:query], default_operator: 'and' })
#from UsersIndex to UserIndex
render json: hash, status: :ok
end
private
def search_params
params.permit(:query, :page, :per)
end
end
Затем я сделаю запрос снова. На этот раз он покажет ошибку
expected file /Users/jason/Code/chewytutorial/tutorial2/my-chewy-app/app/chewy/user_index.rb to define constant UserIndex, but didn't
Далее я снова изменю его с UserIndex на UsersIndex
class UsersController < ApplicationController
def search
@users = UserIndex.query(query_string: { fields: [:name, :email, :phone], query: search_params[:query], default_operator: 'and' })
#from UserIndex to UsersIndex
render json: @users.to_json, status: :ok
end
private
def search_params
params.permit(:query, :page, :per)
end
end
На этот раз он успешно отобразит результат запроса.
Это соответствующие коды Chewy и Rails
Chewy Index
class UsersIndex < Chewy::Index
settings analysis: {
analyzer: {
email: {
tokenizer: 'keyword',
filter: ['lowercase']
}
}
}
define_type User do
field :name
field :email, analyzer: 'email'
field :phone
end
end
Model
class User < ApplicationRecord
update_index('users#user') { self }
enum status: { unconfirmed: 0, confirmed: 1 }
end