【问题标题】:Can this ruby (rails) method be tidied up?这种ruby(rails)方法可以整理吗?
【发布时间】:2011-12-18 12:28:54
【问题描述】:

我对 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

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

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

【问题讨论】:

  • 如果你只有 else 块的代码,你应该用 if !condition 或等效的 unless condition 否定

标签: ruby-on-rails ruby


【解决方案1】:
def full_address
  [address1, address2, address3, posttown, postcode].reject{|l| l.blank?}.join('</br>')
end

【讨论】:

  • 很好,我以前不知道拒绝(与选择相反)。
  • 但这在语义学上与原来的差别太大了,根据数据状态,最终可能会得到完全不同的结果。
  • 或拒绝(&:blank?) 或选择(&:present?)。或者加入(tag(:br))
  • 不错的答案是的。但我同意@clyfe。
  • 哦,在 1.9.2 或 ActiveResource 加载中可以x.reject(&amp;:blank?)
【解决方案2】:

我的看法:

def fullAddress
  full = [address1]
  full << address2 unless address2.blank?
  full << address3 unless address3.blank?
  full << posttown << postcode
  full.join "</br>"
end

self 隐含在方法调用中,并与数组有点杂耍。

【讨论】:

  • 好在你只需要一个数组
【解决方案3】:
def fullAddress
  full = address1 + "<br>"
  full += address2 + "<br>" unless address2.blank?
  full += address3 + "<br>" unless address3.blank?
  full += posttown + "<br>" + postcode
end

【讨论】:

    【解决方案4】:

    完全与您的代码相同:

    def full_adress
      ([address1] +
       [address2, address3].reject(&:blank?) +
       [posttown, postcode]
      ).join("<br/>")
    end
    

    【讨论】:

      【解决方案5】:

      这是另一个解决方案:

      def full_address
        [address1,
         address2,
         address3,
         posttown,
         postcode].inject("") do |full_addr, line|
           full_addr << line + '<br/>' unless line.blank?
           full_addr
         end.chomp('</br>')
      end
      

      它只需要一个数组,并立即开始构造字符串。它应该适用于短字符串(并且完整地址是短字符串)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-18
        • 1970-01-01
        • 2018-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        相关资源
        最近更新 更多