使用inject构建一个数组

时间:2013-05-17 17:03:20

标签: ruby-on-rails ruby iteration enumeration inject

我尝试使用inject构建数组。我希望consentsParticipantConsent个对象的数组。

每个ParticipantConsent对象都可以:have_many ParticipantConsentSample个对象。

我希望sc包含与ParticipantConsentSample相关联的每个ParticipantConsent对象关联的Participant个对象数组。

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的内容。我哪里错了?感谢。

3 个答案:

答案 0 :(得分:3)

尝试以下方法:

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

答案 1 :(得分:3)

由于您只需要从ParticipantConsentSample获取的数组数组,因此您不需要inject,您需要map

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

答案 2 :(得分:2)

如果您希望sample_consents成为数组,则需要使用inject的参数将其初始化为:

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