2013-12-19 65 views
0

我有一個Thred模型,有許多用戶通過貼子。我可以改進此查詢/代碼嗎?

我在我的索引模板中提取所有的碎片,@threds = Thred.all,然後render @threds

但是我檢查當前用戶是否已經在每個threds的回答,使用:

​​

它採用下面的方法:

def user_posted?(user) 
    users = [] 
    self.users.map { |u| users << u.id } 
    users.include?(user.id) 
    end 

它的工作原理,但我想知道是否有是一個更有效的方法來做到這一點?

+4

這個問題似乎是題外話,因爲它要求一個[codereview.se] – 2013-12-19 03:21:51

回答

1
def user_posted?(user) 
    user_ids = self.users.pluck(:id) 
    user_ids.include?(user.id) 
    end 

def user_posted?(user) 
    self.users.where(id: user.id).any? 
    end 
+0

你可以使用'存在?'而不是'任?'獲得可能更好的SQL。我不知道這是否值得。 –

+0

謝謝你們 - 我用'''存在嗎?'''作爲'''任何?'''查詢都會執行一個select count(我猜這樣會更慢嗎?它們看起來都是大致同時執行的在控制檯中)。 – A4J

+0

原生ruby方法比Rails方法更快,除非有其他SQL查詢。這也會影響內存消耗。 – NARKOZ