我正在开发一个调查应用程序,一个组织有0个或更多调查组,其中有0个或更多成员参加调查
对于SurveyGroup,我需要知道还有多少调查需要完成,所以我有这个方法:
SurveyGroup#surveys_outstanding
def surveys_outstanding
respondents_count - surveys_completed
end
但是我还需要知道在组织层面有多少调查是优秀的,所以我有一个类似下面的方法,但是有一种更惯用的方法来使用Array#inject或Array#reduce或类似吗?
组织#surveys_pending
def surveys_pending
result = 0
survey_groups.each do |survey_group|
result += survey_group.surveys_outstanding
end
result
end
答案 0 :(得分:2)
试试这个:
def surveys_pending
@surveys_pending ||= survey_groups.map(&:surveys_outstanding).sum
end
我正在使用memoization,以防计算速度慢
答案 1 :(得分:0)
def surveys_pending
survey_groups.inject(0) do |result, survey_group|
result + survey_group.surveys_outstanding
end
end