代码之家  ›  专栏  ›  技术社区  ›  andi

如何获取Ruby类的名称?

  •  350
  • andi  · 技术社区  · 17 年前

    如何从ActiveRecord对象中获取类名?

    我有:

    result = User.find(1)
    

    我试过:

    result.class
    # => User(id: integer, name: string ...)
    result.to_s
    # => #<User:0x3d07cdc>"
    

    我只需要一个字符串中的类名( User 在这种情况下)。有没有办法?

    我知道这是非常基本的,但是我搜索了Rails和Ruby的文档,却找不到。

    5 回复  |  直到 7 年前
        1
  •  657
  •   flicken    17 年前

    你想打电话给我 .name 在对象的类上:

    result.class.name
    
        2
  •  97
  •   Darren Hicks    12 年前

    下面是正确答案,摘自丹尼尔·里科夫斯基和普西德曼的评论。我已经厌倦了为了找到正确的答案而草草浏览评论…

    如果使用Rails(ActiveSupport):

    result.class.name.demodulize
    

    如果您使用por(纯ol ruby):

    result.class.name.split('::').last
    
        3
  •  33
  •   the Tin Man    13 年前

    两个 result.class.to_s 和 result.class.name 工作。

        4
  •  3
  •   jayhendren    8 年前

    如果要从类方法内部获取类名, class.name 或 self.class.name 不起作用。这些只会输出 Class ,因为类的类是 等级 . 相反,你可以只用 name :

    module Foo
      class Bar
        def self.say_name
          puts "I'm a #{name}!"
        end
      end
    end
    
    Foo::Bar.say_name
    

    输出:

    I'm a Foo::Bar!
    
        5
  •  1
  •   Jignesh Gohel    7 年前

    在我的情况下,当我使用 result.class.name 我有点像 Module1::class_name . 但如果我们只想 class_name 使用

    result.class.table_name.singularize

    推荐文章