0

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

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

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] }} 

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

+0

спасибо большое! Im наконец смог ограничить столбцы. странно, кажется, что если вы запустите метод .to_json вне рендера, он не будет работать. для меня это действительно странное поведение. –

+0

Хотя это действительно исправить проблему для меня, мне было интересно, может быть, есть лучший способ сделать это. следя за моим журналом, я заметил, что запрос занимает всего 70 мс, а представление занимает всего 2 мс, но общее время запроса составляет почти 1500 мс. В этом запросе еще ничего не происходит, поэтому я чувствую, что он исходит из методов .to_json. Есть идеи? –

+0

Является ли ваше приложение в режиме разработки? – davidb