我是否有更惯用的方式在#survey_completed?
中返回布尔值
这就是我在C#中做的事情,我一直认为返回false
的最后一个三元句是多余的,所以Ruby有更好的方法可以做到这一点吗?
这就是我的代码目前的样子:
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
答案 0 :(得分:7)
你可以使用双重否定:
def survey_completed?
!!survey_completed_at
end
答案 1 :(得分:2)
def survey_completed?
!survey_completed_at.nil?
end
答案 2 :(得分:0)
在Ruby中执行此操作的惯用方法是不要这样做。除false
和nil
之外的每个对象都在布尔上下文中评估为true
。因此,survey_completed_at
函数已经用于survey_completed?
函数的目的。
如果您收到调查回复,last_response.created_at
将是非零的,因此该函数将在布尔上下文中评估为true
。如果您没有收到回复且last_response
为nil
,则if将评估为nil
,并且该函数将在布尔值上下文中评估为false
。