如何从 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 的文档,但找不到。
您想在对象的类上调用.name :
result.class.name
这是从 Daniel Rikowski 和 pseidemann 的评论中提取的正确答案。我厌倦了不得不通过评论来找到正确的答案......
如果您使用 Rails (ActiveSupport):
result.class.name.demodulize
如果您使用 POR (plain-ol-Ruby):
result.class.name.split('::').last
既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!
就我而言,当我使用类似的东西时,result.class.name
我得到了类似的东西Module1::class_name
。但如果我们只想class_name
使用
result.class.table_name.singularize