2013-05-17 48 views
0

我想使用注入來構建一個數組。我期望consents是一個ParticipantConsent對象的數組。使用注入構建一個數組

每個ParticipantConsent對象可以:have_manyParticipantConsentSample對象。

我希望sc包含與Participant關聯的每個ParticipantConsent對象的ParticipantConsentSample對象數組的陣列。

consents = ParticipantConsent.where(:participant_id => @participant.id).all 
sample_consents = consents.inject { |sc, c| sc << ParticipantConsentSample.where(:participant_consent_id => c.id).all } 

目前找回的consents內容時我檢查的sample_consents內容。我哪裏錯了?謝謝。

回答

2

如果你想sample_consents是一個數組,你需要使用一個參數,它初始化爲一體,以inject

sample_consents = consents.inject([]) { |sc, c| ... } 
+1

這是一個可怕的例子,因爲它忽略了新的Ruby程序員可能被陷入的陷阱:注入值**必須是注入塊的最後一行。 –

3

嘗試以下:

sample_consents = consents.inject([]) do |sc, c| 
    sc << ParticipantConsentSample.where(participant_consent_id: c.id).to_a 
    sc 
end 
+0

我清理了你的代碼,但是你不需要注入一個簡單的數組。只需使用地圖。 –

+0

由於[從上一行返回],因此不需要單獨的'sc'行(https://ruby-doc.org/core-2.4.2/Array.html#method-i-3C- 3C)。你不愛紅寶石:) – MatzFan

3

既然你只是想一個數組從ParticipantConsentSample獲得的陣列,你並不是真的想要inject,你想要map

sample_consents = consents.map do |c| 
    ParticipantConsentSample.where(:participant_consent_id => c.id).all 
end