我正在阅读官方栏目4指南 in this section 。有些条件陈述我不明白。 This post helps me understand most cases但我对以下示例感到困惑:
def ensure_login_has_a_value
if login.nil?
self.login = email unless email.blank?
end
end
我这样理解:if login.nil?
返回true。如果self.login = email
返回true,则执行代码email.blank?
。它什么都不做。
但是,当我看到这段代码时:
before_create do
self.name = login.capitalize if name.blank?
我不知道为什么如果有条件陈述?
遇到这类问题时,你会做什么而不是询问stackoverflow?
答案 0 :(得分:4)
用这个:
before_create do
self.name = login.capitalize if name.blank?
end
如果只是这样:
before_create do
self.name = login.capitalize
end
然后name
将始终被login.capitalize
覆盖。相反,如果名称未设置,我们只想将名称设置为等于登录名。所以它就像说" name的默认值是登录的大写版本"。
第一段代码写得很混乱,有点笨拙。我会改写它:
def ensure_login_has_a_value
if self.login.blank? && !self.email.blank?
self.login = self.email
end
end
我觉得它更具可读性。
答案 1 :(得分:2)
我会像这样重写ensure_login_has_a_value
的代码块:
def ensure_login_has_a_value
if !login.present? && email.present?
self.login = email
end
end
现在尝试阅读条件: 如果登录不存在且电子邮件存在,则将电子邮件分配给登录属性。
只要您能阅读代码,您的代码就会非常棒。
这是违反你的代码格式的。