首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby是“如果不为空就使用这个,否则就使用那个”的简写形式。

Ruby是“如果不为空就使用这个,否则就使用那个”的简写形式。
EN

Stack Overflow用户
提问于 2011-02-15 00:07:34
回答 4查看 14.4K关注 0票数 16

我有以下代码:

url = file.s3_url.blank? ? file.url : file.s3_url

有没有更短的方法来写这篇文章呢?

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2011-02-15 00:28:44

在ActiveSupport中对此有一个抽象,Object#presence

url = file.s3_url.presence || file.url
票数 20
EN

Stack Overflow用户

发布于 2011-02-15 00:10:31

也许,您可以执行以下操作:

url = file.s3_url || file.url

此代码仅在file.s3_url为nil时使用file.url。这意味着空字符串将不起作用。如果您想确保不使用空字符串,就像您在示例中所做的那样,那么没有更短的方法可以做到这一点。

票数 9
EN

Stack Overflow用户

发布于 2011-02-15 01:09:02

我使用一种实用的方法。

def until_not_blank(*args)
  args.find {|a| !a.blank? }
end

url = until_not_blank(file.s3_url, file.url)

我通常只是把它放到我的ApplicationController中,并使它成为一个帮助器。如果你想让它在全球范围内可用,你可以把它放在内核中,或者你也可以使用monkey patch Array

class Array
  def first_not_blank
    find {|a| !a.blank?}
  end
end

url = [file.s3_url, file.url].first_not_blank
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4994354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档