在我的应用程序中,我想阻止变量为空 - 例如,用户的名称应该是空格和其他空格以外的其他内容。它会像这样工作:
foobar = gets.strip
arr = []
if # the string in the variable 'foobar' isn't blank
arr.push(foobar)
end
Rails将blank?
方法添加到课程String
,以便"".blank?
," ".blank?
和nil.blank?
全部为true
。 Ruby有类似的empty?
方法,但它与blank?
不同,正如我们在下面的示例中看到的那样(这在普通irb
中不起作用):
>> " ".empty?
=> false
>> " ".blank?
=> true
我们看到一串空格不是空的,但它是空白的。
您的解决方案?
P.S。我将在纯Ruby中执行此操作,而不是在Rails中执行此操作。
答案 0 :(得分:3)
如果你想要像rails一样的东西,你需要activesupport。或者,如果事情变得更简单,你可以做到
class String
BLANK_RE = /\A[[:space:]]*\z/
def blank?
BLANK_RE.match?(self)
end
end
正则表达式取自rails。
答案 1 :(得分:2)
答案 2 :(得分:1)
更好地打开预定义的String
类并实现该方法
class String
def blank?
if strip.empty?
return true
end
end
end
还有NilClass
class NilClass
def blank?
return true
end
end
现在你可以使用空白吗?函数在你的代码中。
答案 3 :(得分:0)
那么,您可以简单地对该特定列使用ActiveRecord验证(如果我们正在讨论模型的验证):
validates :name, presence: true
在model- user.rb文件中。
如果您希望覆盖/更改String类,上面的答案很棒。 但是让我们来看看这些案例的规范:
对于STRING, .empty?
:如果str的长度为零,则返回true。
.blank?
对于OBJECT:如果对象为false,为空或空白字符串,则该对象为空。例如,false,'',' ',nil,[]和{}都是空白的。
写在API。