之所以说容易被误用,是因为one? 这个方法名容易被误解成: "在一个 collection 中,只存在一个元素时则返回 ture"。 而实际含义是: "在一个 collection 中,只存在一个不是 false 或 nil 的元素时则返回 true"
在某些场合,如果要判断一个 collection 的元素个数是否为 1 时,请使用 collection 的 length 或 size 方法,而不是使用 one? 。如果是只判断非 false(nil) 的元素个数是否为 1 时,则用 one?
[1,2,3].one? # => false
[1].one? # => true
[false,nil,1].one? # => true
[false,nil,1].length # => 3
DHH 的 Jbuilder 的 Pull Request: https://github.com/rails/jbuilder/pull/21