2006-04-21 (金) [長年日記]
■ [Ruby] Class名をインスタンス名に変更する
たとえば、ProjectManagerを project_manager に変更するにはどうすればよい?
(1) がんばる
class ProjectManager
end
pm = ProjectManager.new
pm.class.to_s.gsub(/[A-Z]+/) {|m| '_' + m.downcase }[1..-1]
# => project_manager
(2) すごいやり方がある
(たぶんここに書かれる)
(3) Railsとかにいいメソッドがある
さあ? あるといいな。
(3)' お、ありがとう。
def underscore(camel_cased_word)
camel_cased_word.to_s.gsub(/::/, '/').
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
gsub(/([a-z\d])([A-Z])/,'\1_\2').
tr("-", "_").
downcase
end

ヒント: http://wiki.rails2u.com/misc/string_flections
http://blog.azpoint.net/blog/paxa buy paxil