如何从ActiveRecord对象中获得类名?
我有:
result = User.find(1)
我试着:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
我只需要类名,在字符串中(在本例中为User)。有什么方法吗?
我知道这是非常基本的,但是我搜索了Rails和Ruby的文档,我没有找到它。
如何从ActiveRecord对象中获得类名?
我有:
result = User.find(1)
我试着:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
我只需要类名,在字符串中(在本例中为User)。有什么方法吗?
我知道这是非常基本的,但是我搜索了Rails和Ruby的文档,我没有找到它。
当前回答
如果你想从类方法内部获取类名,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!
其他回答
以下是正确答案,摘自Daniel Rikowski和pseidemann的评论。我厌倦了在评论中寻找正确答案。
如果你使用Rails (ActiveSupport):
result.class.name.demodulize
如果你使用POR (plain-ol-Ruby):
result.class.name.split('::').last
在我的例子中,当我使用result.class.name之类的东西时,我得到了Module1::class_name之类的东西。但如果我们只需要class_name,则使用
result.class.table_name.singularize
你想在对象的类上调用.name:
result.class.name
result.class。To_s和result.class.name工作。
如果你想从类方法内部获取类名,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!