답변:
Rails에는 underscore
CamelCased 문자열을 underscore_separated 문자열로 변환 할 수 있는 메서드 가 있습니다. 따라서 다음과 같이 할 수 있습니다.
FooBar.name.underscore.to_sym
하지만 ipsum이 말했듯이 그렇게하려면 ActiveSupport를 설치해야합니다.
이를 위해 ActiveSupport를 설치하지 않으려면 직접 원숭이 패치 underscore
를 적용 할 수 있습니다 String
(밑줄 기능은 ActiveSupport :: Inflector에 정의되어 있음 ).
class String
def underscore
word = self.dup
word.gsub!(/::/, '/')
word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
word.tr!("-", "_")
word.downcase!
word
end
end
레일스 4 .model_name
Rails 4에서는 다음 ActiveModel::Name
과 같은 더 많은 유용한 "의미 적"속성을 포함 하는 객체를 반환합니다 .
FooBar.model_name.param_key
#=> "foo_bar"
FooBar.model_name.route_key
#=> "foo_bars"
FooBar.model_name.human
#=> "Foo bar"
따라서 원하는 의미와 일치하는 경우 그중 하나를 사용해야합니다. 장점 :
BTW human
는 I18N을 인식하는 이점이 있습니다.
model_name
인스턴스 객체에도 작동합니다. 예 : foo_bar.model_name
. 당신은 전체 목록 쓰기하려면 foo_bar.model_name.inspect
레일 콘솔 또는 디버거
classify
, modelize
작동하지 않는 것 같았습니다.
첫째 : gem install activesupport
require 'rubygems'
require 'active_support'
"FooBar".underscore.to_sym
FooBar.to_s.underscore.to_sym
합니다. 클래스 (상수)를 심볼로 변환하려고하므로 Factory Girl에 피드 할 수 있습니다 . :)
내가했던 것은 다음과 같습니다.
module MyModule
module ClassMethods
def class_to_sym
name_without_namespace = name.split("::").last
name_without_namespace.gsub(/([^\^])([A-Z])/,'\1_\2').downcase.to_sym
end
end
def self.included(base)
base.extend(ClassMethods)
end
end
class ThisIsMyClass
include MyModule
end
ThisIsMyClass.class_to_sym #:this_is_my_class
String#demodulize
이전에 부품을 제거합니다 ::
.