Я использую Chewy gem Топтала для подключения и запроса моего Elasticsearch, точно так же, как ODM.
Я использую Chewy вместе с Elasticsearch 6, Ruby on Rails 5.2 и Active Record.
Я определил свой индекс так:
class OrdersIndex < Chewy::Index
define_type Order.includes(:customer) do
field :id, type: "keyword"
field :customer do
field :id, type: "keyword"
field :name, type: "text"
field :email, type: "keyword"
end
end
end
И моя модель:
class Order < ApplicationRecord
belongs_to :customer
end
Проблема здесь в том, что когда я выполняю любой запрос с использованием Chewy, данные клиента десериализуются как хэш вместо Object, и я не могу использовать точечную запись для доступа к вложенным данным.
results = OrdersIndex.query(query_string: { query: "test" })
results.first.id
# => "594d8e8b2cc640bb78bd115ae644637a1cc84dd460be6f69"
results.first.customer.name
# => NoMethodError: undefined method `name' for #<Hash:0x000000000931d928>
results.first.customer["name"]
# => "Frederique Schaefer"
Как я могу получить доступ к вложенной ассоциации, используя точечную запись (result.customer.name
)? Или десериализовать вложенные данные внутри объекта, такого как структура, что позволяет мне использовать точечную запись?