如果string为空,则返回一些默认值

fl0*_*00r 90 ruby ruby-on-rails

我经常需要检查一些值是否为空,并写下"没有数据",如下所示:

@user.address.blank? ? "We don't know user's address" : @user.address
Run Code Online (Sandbox Code Playgroud)

当我们有大约20-30个字段,我们需要以这种方式处理它变得丑陋.

我所做的是使用or方法扩展String类

class String
  def or(what)
    self.strip.blank? ? what : self
  end
end

@user.address.or("We don't know user's address")
Run Code Online (Sandbox Code Playgroud)

现在它看起来更好了.但它仍然是原始的和粗糙的

如何解决我的问题会更好.也许最好扩展ActiveSupport class或使用辅助方法或mixins或其他任何东西.什么红宝石的思想,你的经验和最佳实践可以告诉我.

Dav*_*ips 224

ActiveSupport presence为所有返回其接收者的对象添加一个方法present?(如果(相反blank?)),nil否则.

例:

host = config[:host].presence || 'localhost'
Run Code Online (Sandbox Code Playgroud)

  • 这很酷.默认的轨道可用性是优先的.感谢名单! (2认同)

Mat*_*ggs 12

Phrogz在PofMagicfingers评论中给了我一个想法,但是覆盖了什么呢?代替?

class String
  def |(what)
    self.strip.blank? ? what : self
  end
end

@user.address | "We don't know user's address"
Run Code Online (Sandbox Code Playgroud)