如何从ActiveRecord对象获取类名?
我有:
result = User.find(1)
我试过了:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
我只需要字符串中的类名(在本例中为User
)。 有没有办法呢?
我知道这是非常基本的,但我搜索了Rails和Ruby的文档,我找不到它。
#1楼
这是正确答案,摘自Daniel Rikowski和pseidemann的评论。 我厌倦了通过评论来寻找合适的答案......
如果您使用Rails(ActiveSupport):
result.class.name.demodulize
如果你使用POR(普通红宝石):
result.class.name.split('::').last
#2楼
在我的情况下,当我使用类似result.class.name
东西时,我得到了类似Module1::class_name
东西。 但是如果我们只想要class_name
,请使用
result.class.table_name.singularize
#3楼
如果要从类方法中获取类名,则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楼
您可以使用class
方法获取ruby中任何对象的类。
例如
array= []
=> []
array.class
=> Array
hash = {}
=> {}
hash.class
=> Hash
string = 'This is String'
=> "This is String"
string.class
=> String
#5楼
你想在对象的类上调用.name :
result.class.name
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3167106