4

ブール値を返すためのより慣用的な方法はあり#survey_completed? ますfalseか?

これは私のコードが現在どのように見えるかです:

  def survey_completed?
    self.survey_completed_at ? true: false
  end

  def survey_completed_at
    # Seeing as the survey is submitted all or nothing, the time the last response is persisted
    # is when the survey is completed
    last_response = self.responses.last
    if last_response
      last_response.created_at
    end
  end
4

3 に答える 3

7

二重否定を使用できます。

def survey_completed?
  !!survey_completed_at
end
于 2013-08-16T11:16:16.790 に答える
2
  def survey_completed?
    !survey_completed_at.nil?
  end
于 2013-08-16T11:19:49.523 に答える
0

Ruby でこれを行う慣用的な方法は、それを行わないことです。を除くすべてのオブジェクトは、ブール コンテキストでfalse評価nilされます。trueしたがって、survey_completed_at関数はすでに関数の目的を果たしていsurvey_completed?ます。

調査の回答を得た場合、last_response.created_at非 nil になるため、関数はtrueブール値のコンテキストで評価されます。応答が得られず、last_responseisnilである場合、 if は評価されnil、関数はfalseBoolean コンテキストで評価されます。

于 2013-08-16T21:04:04.357 に答える