Ruby on Rails некапитализирует первую букву - PullRequest
31 голосов
/ 17 декабря 2010

Я использую Rails 2.3.2.

Как конвертировать "Cool" в "cool"? Я знаю, "Cool".downcase работает, но есть ли метод Ruby / Rails, который противоположен capitalize, т.е. uncapitalize или decapitalize?

Ответы [ 10 ]

98 голосов
/ 26 октября 2012

Также есть:

"coolat_cat".camelize(:lower) # => "coolCat"
47 голосов
/ 17 декабря 2010

Нет обратного capitalize, но вы можете смело бросать свои собственные:

class String
  def uncapitalize 
    self[0, 1].downcase + self[1..-1]
  end
end
8 голосов
/ 01 февраля 2013

Вы также можете сделать это с помощью простого sub:

"Cool".sub(/^[A-Z]/) {|f| f.downcase }
7 голосов
/ 08 августа 2014
str = "Directly to the south"
str[0] = str[0].downcase
puts str
#=> "directly to the south"
4 голосов
/ 17 декабря 2010

Нет реального обратного использования заглавных букв, но я думаю, что underscore подходит близко.

"CoolCat".underscore  #=> "cool_cat"
"cool_cat".capitalize #=> "Cool_cat"
"cool_cat".camelize   #=> "CoolCat"

Редактировать: underscore, конечно, обратное значение camelize,не capitalize.

2 голосов
/ 28 октября 2016

Существует обратное значение capitalize, называемое swapcase:

"Cool Cat".swapcase   #=> "cOOL cAT"
2 голосов
/ 21 марта 2016

Вы можете использовать тап (чтобы он умещался на одной строке):

"JonSkeet".tap { |e| e[0] = e[0].downcase } # => "jonSkeet"
1 голос
/ 30 мая 2017

Попробуйте это

'Cool'.sub(/^([A-Z])/) { $1.tr!('[A-Z]', '[a-z]') }

https://apidock.com/ruby/XSD/CodeGen/GenSupport/uncapitalize

1 голос
/ 17 декабря 2010

Если вы используете Ruby Facets, вы можете в нижнем регистре первая буква:

https://github.com/rubyworks/facets/blob/master/lib/core/facets/string/uppercase.rb

0 голосов
/ 24 декабря 2016
name = "Viru"

name = name.slice(0).downcase + name[1..(name.length)]
...