#ruby-on-rails #mongodb #mongoid
#ruby-on-rails #mongodb #mongoid
Вопрос:
У меня есть приложение Rails / Mongoid, которое отображает данные на стороне клиента с использованием highcharts. Прямо сейчас, чтобы передать данные в Javascript, я использую запрос Mongoid и Rails’ as_json / to_json в файле шаблона. Мне это кажется очень неэффективным, потому что данные json должны быть проанализированы в структурах ruby, а затем повторно преобразованы в JSON. Это нормально, когда имеется небольшой объем данных, но в моем случае их может быть много.
Итак, мой вопрос в том, как я могу выполнить необработанный запрос mongodb и просто записать выходные данные непосредственно в буфер ответов Rails, не проходя через сериализацию / десериализацию Ruby JSON?
Комментарии:
1. можете ли вы привести несколько примеров?
Ответ №1:
Данные в MongoDB хранятся в формате BSON, который не является JSON. Драйвер ruby выполняет десериализацию (BSON::BSON_CODER.deserialize) в методе read_documents. Если вы хотите преобразовать свой собственный BSON в JSON, вам понадобится ваша реализация BSON::BSON_coder.десериализуйте и, возможно, перепишите дополнительные части в драйвере mongo-ruby. Однако, если это допустимые накладные расходы, тогда вы просто создадите подкласс ActionController::Metal и сделаете что-то вроде этого:
class ChartController < ActionController::Metal
def chart
res = fetch_data_from_mongodb
self.content_type = 'application/json'
self.response_body = res.to_json
end
end
Другой альтернативой может быть использование HTTP-интерфейса REST MongoDB, который предоставляет JSON. Но у вас должен быть некоторый контроль доступа в вашем приложении и, в основном, прокси-запросы.