2012-04-16 95 views
1

我們在我們的Rails 3應用程序中有一個SQL查詢。Ruby追隨者查詢

@followers返回current_user之後的用戶的ID數組。

@followers = current_user.following 
@feed_items = Micropost.where("belongs_to_id IN (?)", @followers) 

有沒有更有效的方法來做這個查詢?

+4

只是出於好奇,爲什麼這是低效率或不適合? – Steve 2012-04-16 22:40:35

+0

在查詢速度方面的未來可擴展性問題 – 2012-04-17 02:31:27

回答

3

您擁有的查詢不能再進行真正的優化了。通過在belongs_to_id上添加一個索引(無論如何你幾乎總是對外鍵進行操作),它可以做得更快,但是這並不會改變實際的查詢。

有寫IN查詢雖然清潔器的方法:

Micropost.where(:belongs_to_id => @followers) 

其中@followers是值的belongs_to_id陣列。

+1

+1(嘆氣)是的,這比我的還要乾淨。不得不讚揚安德魯;) – 2012-04-16 22:50:54

1

這對我來說很好。

不過,如果你正在尋找的代碼字符的實際最低NUMER,你可以改變:

Micropost.where("belongs_to_id IN (?)", @followers)

Micropost.where("belongs_to_id = ?", @followers)

其內容更容易一些。

Rails將會看到該陣列並執行IN

一如既往的主要紅寶石語言的目標是可讀性,所以很少有改進的幫助。

至於不滿意的查詢,你可以檢查該字段的索引。
他們往往是一個更具體的每個數據庫 - 你只指定了通用的SQL。在你的問題。