问题应该很简单,但我在想什么是最好的方法。简单地说,有一个User模型和一个Quest模型。用户有一个任务。现在,我只想检查用户的任务是否已过期。
我以为我必须过期?作为任务的实例方法。现在,我可以做类似的事情:
current_user.quest.expired?
甚至稍后创建一个委托,使其像:
current_user.quest_expired?
然而,这是令人讨厌的。如果用户没有任务,那么这个任务将返回nil错误。我不想事先检查或为User模型创建不同的方法,因为我觉得这打破了封装。
你会怎么做?
答案 0 :(得分:4)
通常用:
完成delegate :expired?, :to => :quest, :prefix => true, :allow_nil => true
答案 1 :(得分:1)
通常这会在Rails中以这种方式解决:
定义两种方法:
current_user.quest.expired?
current_user.quest_expired?
并将后一种方法定义为:
def quest_expired?
return nil unless quest
quest.expired?
end
然后调用quest_expired?如果您无法确定用户是否有任务。
答案 2 :(得分:1)
current_user.quest.try(:expired?)