2009-08-25 24 views
0

假設我有一個帖子和類別模型,每個帖子屬於一個類別。在幾乎每一頁上,我都得到類別列表:Rails:刪除不必要的數據庫查詢

@categories = Category.all 

這產生一個Category對象的數組。現在,假設每個類別都有id和name屬性。查看帖子時,我想顯示類別名稱。

我最初是做這樣的事情越來越類別名稱:

@post = Post.find(params[:id], :include => :category) 

但是,我意識到,我已經有@categories陣列。似乎沒有必要:包括當我已經有一個類別列表。因此,我現在在陣列上執行查找:

category = @categories.find { |category| @post.category_id == category.id }.name 

這可以工作並減少查詢次數。我的問題是,如果這是解決減少查詢數量(無緩存)的最佳方法?

回答

2

這非常明智。

唯一的風險(它是一個微乎其微的)是,你可能會受到競爭條件。例如,某人在獲取類別列表後可能會更改帖子的類別,或者他們可能會更新類別列表,並且您顯示的內容將不再正確。隨後,如果他們點擊某個類別名稱以獲得該類別所有帖子的列表,他們可能會得到一個錯誤,除非您正在處理這類事情。

國際海事組織,雖然這是一個非常小的價格。

+0

好點。 UNF。沒有投票剩餘:) – 2009-08-25 23:59:34

1

這裏唯一的問題是,當你決定你不再需要類別列表並嘗試刪除它。

否則你有一個很好的解決方案。

0

如果您有大量類別,該怎麼辦?你還會把它們全部拿走嗎?做一個:include要好得多,因爲SQL總會勝過Ruby。

+0

我只能設想最多說... 20個類別。我總是需要獲取這些類別。 – Homar 2009-08-26 03:26:40