Jos*_*ver 90 ruby metaprogramming ruby-on-rails
如何以编程方式将类名FooBar
转换为符号:foo_bar
?像这样的东西,但是正确处理骆驼的情况?
FooBar.to_s.downcase.to_sym
Run Code Online (Sandbox Code Playgroud)
kik*_*ito 138
Rails附带了一个名为的方法underscore
,允许您将CamelCased字符串转换为underscore_separated字符串.所以你可以这样做:
FooBar.name.underscore.to_sym
Run Code Online (Sandbox Code Playgroud)
但正如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
Run Code Online (Sandbox Code Playgroud)
Cir*_*四事件 69
.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"
Run Code Online (Sandbox Code Playgroud)
所以你应该使用其中一个,如果它们符合你想要的含义,很可能就是这种情况.好处:
BTW,human
具有I18N意识的优势.
第一:gem install activesupport
require 'rubygems'
require 'active_support'
"FooBar".underscore.to_sym
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
44269 次 |
最近记录: |