如何将Ruby类名称转换为下划线分隔的符号?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

如何以编程方式转换类名,FooBar变成一个符号,比如像这样:foo_bar的东西?

FooBar.to_s.downcase.to_sym
提问于
用户回答回答于

Rails带有一个叫做underscore的方法,可以让你将CamelCased字符串转换为下划线的字符串。所以你可以这样做:

FooBar.name.underscore.to_sym

但是你必须安装ActiveSupport才能做到这一点,正如ipsum所说。

如果你不想安装的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返回一个ActiveModel::Name包含许多有用的更多“语义”属性的对象,例如:

FooBar.model_name.param_key
#=> "foo_bar"

FooBar.model_name.route_key
#=> "foo_bars"

FooBar.model_name.human
#=> "Foo bar"

所以你应该使用其中的一种,如果它们符合你想要的含义,情况可能如此。优点:

  • 更容易理解你的代码
  • 即使在Rails决定更改命名约定的事件中,应用程序仍然可以工作。

扫码关注云+社区