我怎样才能得到一个ActiveRecord对象的类名?我如何获得Ruby类的名称?
我:
result = User.find(1)
我想:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
我只需要类的名字,一个字符串(User
在这种情况下)。有没有一种方法呢?
我知道这是非常基本的,但我找遍两个轨和Ruby的文档,我找不到它。
我怎样才能得到一个ActiveRecord对象的类名?我如何获得Ruby类的名称?
我:
result = User.find(1)
我想:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
我只需要类的名字,一个字符串(User
在这种情况下)。有没有一种方法呢?
我知道这是非常基本的,但我找遍两个轨和Ruby的文档,我找不到它。
你想打电话.name对对象的类:
result.class.name
当我做到这一点我之前得到的模块名称,因此“模块::子模块::班”,有没有想起来了“类” – 2011-09-02 11:35:02
@Abe的方式:`result.class.name.split(':: “).last` – 2011-10-01 10:40:30
两个result.class.to_s
和result.class.name
工作。
这里的正确答案,由丹尼尔Rikowski和pseidemann评论提取。我厌倦了通过评论剔除找到正确的答案...
如果您使用的Rails(的ActiveSupport):
result.class.name.demodulize
如果使用POR(纯醇 - 红宝石):
result.class.name.split('::').last
在我的情况下,当我使用类似result.class.name
的东西时,我得到了类似Module1::class_name
的东西。但是,如果我们只希望class_name
,使用
result.table_name.singularize
@Oliver n:正常的Ruby对象,`对象#class.inspect`给出了同样的`对象#class.name`,而这是不ActiveRecord对象的情况。 – 2011-08-09 23:53:06