0

我有一個餐廳應用程序,我正在建設,允許餐館在線創建菜單。現在我們的頁面在初始頁面加載時會加載6個項目,然後無限滾動交互會繼續向下滾動頁面,並通過AJAX動態加載6個項目。似乎無法獲得rails協會限制列與json

一切正常,但我遇到了限制我的數據庫關聯字段的問題。例如,我的項目有自己的尺寸,這與

has_many :sizes 

建立的項目模型,然後我通過JSON訪問使用

item.sizes 

來組織我的數據的大小要求退貨,我使用下面的方法(雖然我很歡迎在這個方法的改進):

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

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

所有這一切工作,是很簡單的,但是當我試圖限制選定列retur從數據庫中,我開始得到奇怪的行爲。我不確定是什麼原因造成的。我曾試着這樣做:

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

,我已經試過這樣做,以及:

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

這兩種方法的工作只返回必填字段在服務器端,但事情似乎發生它之間的請求和返回到Web瀏覽器(我的猜測是,它是由渲染方法引起的),似乎是撤消我獨特的字段選擇器,而是發回所有的數據庫數據(所以而不是唯一的ID,名稱,價格,我收到了大約20個不必要的數據字段)。

我正在尋找任何可能有助於完成此項工作的建議。此外,如果任何人有關於改進查詢時間的方法的任何其他信息,那也將非常感激。我已經介紹了所有的基本教程,並且ii在訪問這些項目之前已經使用了急切的加載(我想知道這與我的問題有什麼關係?),但是我正在嘗試找到很好的解決方案來防止造成瓶頸通過這些to_json和render:json方法。

目前,數據庫上大約需要400毫秒的一系列查詢需要額外的1000毫秒渲染:json。

回答

1

你應該通過傳遞參數到render方法類似這樣的限制因素:

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

這應該爲你做它。

+0

非常感謝!我終於能夠限制列。奇怪的是,如果你在渲染之外運行.to_json方法,它似乎無法工作。這對我來說真的很奇怪。 –

+0

雖然這確實爲我解決了這個問題,但我想知道是否有更好的方法來做到這一點。留意我的日誌,我注意到查詢只需要70毫秒,視圖只需要2毫秒,但總請求時間差不多是1500毫秒。在這個請求中沒有其他事情發生,所以我覺得它來自.to_json方法。有任何想法嗎? –

+0

您的應用程序是否處於開發模式? – davidb