如何从ActiveRecord对象中获取类名?
我有:
result = User.find(1)
我试过了:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
我只需要字符串中的类名(在本例中为User
)。有没有办法呢?
我知道这是非常基本的,但我搜索了Rails和Ruby的文档,我找不到它。
答案 0 :(得分:673)
您想在对象的类上调用.name:
result.class.name
答案 1 :(得分:99)
这是正确答案,摘自Daniel Rikowski和pseidemann的评论。我厌倦了通过评论来寻找合适的答案......
如果您使用Rails(ActiveSupport):
result.class.name.demodulize
如果你使用POR(普通红宝石):
result.class.name.split('::').last
答案 2 :(得分:33)
result.class.to_s
和result.class.name
都有效。
答案 3 :(得分:5)
如果您想从类方法中获取类名,class.name
或self.class.name
无法正常工作。这些只会输出Class
,因为类的类是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!
答案 4 :(得分:1)
在我的情况下,当我使用类似result.class.name
的内容时,我得到的内容类似于Module1::class_name
。但如果我们只想要class_name
,请使用
result.class.table_name.singularize