루비 클래스의 이름을 어떻게 얻습니까?
-
05-07-2019 - |
문제
ActiveRecord 객체에서 클래스 이름을 얻으려면 어떻게해야합니까?
나는 가지고있다:
result = User.find(1)
나는 시도했다 :
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
문자열로 클래스 이름 만 필요합니다 (User
이 경우). 그것에 대한 방법이 있습니까?
나는 이것이 매우 기본적이라는 것을 알고 있지만, 나는 Rails와 Ruby의 문서를 모두 검색했지만 그것을 찾을 수 없었습니다.
해결책
당신은 전화하고 싶습니다 .이름 객체의 수업에서 :
result.class.name
다른 팁
다음은 Daniel Rikowski와 Pseidemann의 의견에서 추출한 정답입니다. 나는 정답을 찾기 위해 의견을 잡아 당겨야하는 것에 지쳤습니다 ...
레일 (ActivesUpport)을 사용하는 경우 :
result.class.name.demodulize
PER (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
제휴하지 않습니다 StackOverflow