除非组合在轨道中,如何理解?

时间:2015-06-29 16:20:45

标签: ruby-on-rails ruby

我正在阅读官方栏目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?

2 个答案:

答案 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

现在尝试阅读条件: 如果登录不存在且电子邮件存在,则将电子邮件分配给登录属性。

只要您能阅读代码,您的代码就会非常棒。

这是违反你的代码格式的。