Ну, вы можете написать метод на любом file
экземпляре (скажем, S3File
):
class S3File
def real_url
self.s3_url.blank? ? self.url : self.s3_url
end
#...
end
Тогда все становится очень просто:
url = file.real_url
Как сказал @tokland, вы могли бы monkey patch Object
использовать метод 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)