Rails更加惯用的添加值的方式

时间:2013-08-14 16:02:38

标签: ruby-on-rails ruby

我正在开发一个调查应用程序,一个组织有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

2 个答案:

答案 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