我个人认为这比三元运算符更具可读性。
last_comment_time =
if @community_topic.comment_threads.last.created_at.nil?
commentable.created_at
else
community_topic.comment_threads.last.created_at
end
如果您要牺牲清晰度,那么更多的行不一定是坏事。
至于你的代码:
last_comment_time = @community_topic.comment_threads.last.created_at || commentable.created_at
这是最好的方法。您很可能会因为.last
正在返回而收到错误nil
(这是在调用它的范围内没有记录时发生的情况)。因此,在这种情况下,您很可能在@community_topic
.
Ruby 提供了一个名为的方法,如果在 Nil::NilClass 上try
调用该方法,它将调用一个方法并返回(而不是抛出 NoMethodError 异常)。nil
这可以在您的代码行中使用,如下所示:
last_comment_time = @community_topic.comment_threads.last.try(:created_at) || commentable.created_at
所以last
将返回 nil,然后尝试调用created_at
. 因为created_at
在 nil 上使用 调用try
,所以它也将返回 nil,因此变量将设置为commentable.created_at
。