Не могу получить ассоциацию рельсов, чтобы ограничить столбцы с JSON

У меня есть приложение для ресторана, которое я создаю и которое позволяет ресторанам создавать меню онлайн. Прямо сейчас наша страница загружает 6 элементов при начальной загрузке страницы, и затем происходит бесконечное взаимодействие прокрутки, поскольку они продолжают прокручивать страницу вниз и динамически загружать еще 6 элементов через AJAX.

Все работает, но у меня возникают проблемы с ограничением полей ассоциаций моей базы данных. Например, мои элементы имеют свои размеры, которые устанавливаются в модели элементов с помощью

has_many :sizes

а затем я получаю доступ к этим размерам, используя

item.sizes

чтобы организовать свои данные для возврата через json, я использую следующий метод (хотя я весьма приветствую улучшения этого метода):

items = Item.where("blah blah")
items.each do |item|
    item[:sizes] = item.sizes
end

render :json => {:items => items}

Все это работает и достаточно просто, но когда я пытаюсь ограничить выбранные столбцы, возвращаемые из базы данных, я начинаю странно себя вести. Я не уверен, что вызывает это. Я пытался сделать это:

item[:sizes] = item.sizes.select("id, name, price")

и я попытался сделать это также:

item[:sizes] = item.sizes.to_json(:only => [:id, :name, :price])

оба эти метода работают для возврата только запрошенных полей на стороне сервера, но между запросом и возвратом в веб-браузер, кажется, что-то происходит (кажется, что это вызвано методом рендеринга), что отменив мои уникальные селекторы полей и вместо этого отправив обратно все данные базы данных (поэтому вместо только идентификатора, имени, цены я получаю около 20 ненужных полей данных).

Я ищу любые предложения, которые могли бы помочь сделать эту работу. Кроме того, если у кого-то есть какая-либо другая информация о способах улучшения времени запросов, это также будет высоко оценено. Я уже рассмотрел все основные учебные пособия, и я уже использую готовую загрузку перед доступом к элементам (интересно, это как-то связано с моими проблемами?), Но я пытаюсь найти хорошие решения, чтобы предотвратить возникновение узкого места этими методами to_json и render:json.

В настоящее время последовательность запросов, которая занимает около 400 мс для базы данных, требует дополнительных 1000 мс для рендеринга: json.

1 ответ

Вы должны ограничить элементы, передав свои параметры render метод как это:

render :json => items.to_json(:include => { :sizes => { :only => [:id, :name, :price] }}

это должно сделать это для вас.

Другие вопросы по тегам