and*_*ndi 375 ruby ruby-on-rails rails-activerecord
如何从ActiveRecord对象获取类名?
我有:
result = User.find(1)
Run Code Online (Sandbox Code Playgroud)
我试过了:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Run Code Online (Sandbox Code Playgroud)
我只需要一个字符串中的类名(User在本例中).有没有办法呢?
我知道这是非常基本的,但我搜索了Rails和Ruby的文档,我找不到它.
fli*_*ken 706
你想在对象的类上调用.name:
result.class.name
Run Code Online (Sandbox Code Playgroud)
Dar*_*cks 114
这是正确答案,摘自Daniel Rikowski和pseidemann的评论.我厌倦了通过评论来寻找合适的答案......
如果您使用Rails(ActiveSupport):
result.class.name.demodulize
Run Code Online (Sandbox Code Playgroud)
如果你使用POR(普通红宝石):
result.class.name.split('::').last
Run Code Online (Sandbox Code Playgroud)
小智 34
无论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
Run Code Online (Sandbox Code Playgroud)
输出:
I'm a Foo::Bar!
Run Code Online (Sandbox Code Playgroud)