ruby-on-rails – Ruby的简写,“如果它不为空,使用它,否则使用”

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Ruby的简写,“如果它不为空,使用它,否则使用”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码
url = file.s3_url.blank? ? file.url : file.s3_url

有更短的写法吗?

谢谢!

解决方法

那么你可以在任何文件中写一个方法(比如说S3File):
class S3File 
   def real_url
     self.s3_url.blank? ? self.url : self.s3_url
   end
   #...
end

那么它真的很简单:

url = file.real_url

正如@tokland所说,你可以使用补丁对象来使用or_if方法,这将像下面这样实现:

class Object
   def or_if(method,val = nil)
      self.send(method) ? (block_given? ? yield : val) : self
   end         
end

这样,你可以这样做:

url = file.s3_url.or_if(:blank?) { file.url }

或这个:

url = file.s3_url.or_if(:blank?,file.url)

猜你在找的Ruby相关文章