回答:
Railsには、underscore
CamelCased文字列をunderscore_separated文字列に変換できるメソッドが付属しています。だからあなたはこれを行うことができるかもしれません:
FooBar.name.underscore.to_sym
しかし、ipsumが言うように、そのためにはActiveSupportをインストールする必要があります。
あなただけのためにそのactivesupportのをインストールしたくない場合は、することができます猿パッチunderscore
にString
自分(アンダースコア関数を定義したactivesupportの::インフレクタ):
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
Rails 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"
したがって、希望する意味と一致する場合は、これらのいずれかを使用する必要があります。利点:
ところで、human
I18Nを認識するという利点があります。
model_name
インスタンスオブジェクトでも機能します。例:foo_bar.model_name
。完全なリストが必要な場合はfoo_bar.model_name.inspect
、railsコンソールまたはデバッガーに書き込みます
classify
、modelize
うまくいかなかったようです。
最初:gem install activesupport
require 'rubygems'
require 'active_support'
"FooBar".underscore.to_sym
FooBar.to_s.underscore.to_sym
私は、その後にフィードすることができ、シンボル、に(一定である)クラスを変換しようとしていることから、ファクトリー・ガール。:)
ここに私が行きました:
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
、前にパーツを削除し::
ます。