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)
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)