0

我有兩個型號:有沒有更簡單的方法來返回ActiveRecord結果集的belongs_to關係?

Answers: 
    belongs_to: user 

User: 
    has_many: answers 

是否有Ruby或Rails的辦法做到在一個下面去,而不是創建一個數組,並推動所需要的對象成嗎?

def top_experts 
    answers = Answer.where(some constraints) 

    users = [] 
    answers.each do |answer| 
     users << answer.user 
    end 
    users 
end 
+1

可能有更好的方法來做到這一點。首先,您需要決定需要多少票才能將'User'限定爲'top_user'。然後,這個查詢應該在'User'模型上執行,而不是'Vote'模型。 – zeantsoi

+0

@zeantsoi謝謝!事實證明,這比我想象的要複雜 - 我錯誤地使用了錯誤的模型來使用戶成爲頂級專家。事實證明,我需要獲得用戶的問題和答案,然後發佈他們的選票。 – Hopstream

+0

足夠公平......謹慎地重述這個問題? – zeantsoi

回答

1

您可以通過用戶joins

def top_experts 
    Answer.where(some constraints).includes(:user).collect{|x| x.user} 
    # Will return an Array of users 
end 

編輯:

使用includes爲預先加載。它會減少爲獲取用戶而執行的查詢的數量。

+0

我不需要加入 - rails模型關係已經爲每個投票對象提供了'vote.user' ......只需要一種方法來返回一個只有用戶的活動記錄結果集,而不是投票。 – Hopstream

+0

我知道,但你可以使用'vote.user'只與實例或對象,但在你的問題你指定類'投票',在那裏你只能使用'聯合'來檢索關聯 – shiva

+0

謝謝你的作品! – Hopstream

0

嗨,你可以使用SELECT子句選擇什麼應該隨着where子句

Vote.select(USER_ID)。凡(一些約束上)

相關問題