这种红宝石(铁轨)方法可以整理吗?

Jac*_*ack 1 ruby ruby-on-rails

我对ruby很新(并且正在使用Rails)并且想知道以下方法是否可以整理.在它当前的状态下它确实有效,但我觉得有一种更好的编写方式,并希望了解更多关于语法的知识.

def fullAddress
  full = self.address1 + "</br>"
  if self.address2.blank?
  else
    full = full + self.address2  + "</br>"
  end
  if self.address3.blank?
  else
    full = full + self.address3  + "</br>"
  end
  full = full + self.posttown + "</br>" + self.postcode
end
Run Code Online (Sandbox Code Playgroud)

每个'self'都有address1,posttown和postcode,但是address2和address3是可选的,只有当它们存在时才应该添加到fullAddress(即既不是nil也不是空白).

这个问题可能不适合SO,但我已经遇到过这种类型的辅助方法,并且我确信我可以以更好的方式实现它.

ste*_*lag 12

def full_address
  [address1, address2, address3, posttown, postcode].reject{|l| l.blank?}.join('</br>')
end
Run Code Online (Sandbox Code Playgroud)

  • 很好,我以前不知道拒绝(与选择相反). (2认同)
  • 但是,这与原始信息系统中的原始信息有很大不同,取决于数据状态,人们可能会得到完全不同的结果. (2认同)

cly*_*yfe 5

我的看法:

def fullAddress
  full = [address1]
  full << address2 unless address2.blank?
  full << address3 unless address3.blank?
  full << posttown << postcode
  full.join "</br>"
end
Run Code Online (Sandbox Code Playgroud)

self 在方法调用中是隐式的,并且有点像数组一样玩杂耍.