Active Support是一个支持(!)Rails其他部分的 "有用 "东西的库。它包括扩展Ruby基础类的方法,如Hash
,String
和Integer
。
即使是最有经验的Rails开发者也会不断在Active Support中找到有用的方法。而且在新版本的库中,有用的方法也在不断地被添加。
在解析参数时,或者在我们的代码接受复杂的输入时,我们经常需要清理Hash
es和Array
s的值。Ruby提供了#compact
方法来删除数组中的nil
值,并且(从2.4开始)为Hash提供了同样的#compact
方法。
除了nil
,我们还经常希望删除空字符串或其他 "空白 "对象。
而不是...
...手动循环浏览哈希的值来删除nil
和空字符串。
[1, nil, “3”, “”, []].compact
#=> [1, “3”, “”, []]
[1, nil, “3”, “”, []].reject { |e| e.nil? || e&.empty? }
#=> [1, “3”]
[1, nil, “3”, “”, []].reject(&:blank?)
#=> [1, “3”]
{1 => 2, 2 => nil, “3” => “4”, 4 => “”, 5 => []}.compact
#=> {1 => 2, “3” => “4”, 4 => “”, 5 => []}
{1 => 2, 2 => nil, “3” => “4”, 4 => “”, 5 => []}.reject { |_, v| v.nil? || v&.empty? }
#=> {1 => 2, “3” => “4”}
{1 => 2, 2 => nil, “3” => “4”, 4 => “”, 5 => []}.reject { |_, v| v.blank? }
#=> {1 => 2, “3” => “4”}
使用...
...Active Support的#compact_blank
方法。
[1, nil, “3”, “”, []].compact_blank
#=> [1, “3”]
result = {1 => 2, 2 => nil, “3” => “4”, 4 => “”, 5 => []}.compact_blank
#=> {1 => 2, “3” => “4”}
#compact_blank方法是在Rails 6.1中添加的。
为什么?
这是一个 "有用的Rails东西",一旦你习惯了它,就感觉它是Ruby的一部分。Active Support中的许多核心扩展都有这种共同的感觉。它比基于#reject
-的版本好读得多。
为什么不呢?
有些人对框架侵入语言的基本概念感到不满。
然而,绝对有Ruby采用 "主动支持主义 "的情况。Hash#compact
,早在Rails的基础语言中就有了。