복붙노트

[RUBY-ON-RAILS] 어떻게 루비 클래스의 이름을받을 수 있나요?

RUBY-ON-RAILS

어떻게 루비 클래스의 이름을받을 수 있나요?

어떻게 액티브 오브젝트의 클래스 이름을 얻을 수 있나요?

나는 가지고있다:

result = User.find(1)

나는 시도했다 :

result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"

나는 문자열, (이 경우 사용자) 만 클래스 이름이 필요합니다. 그 방법이 있습니까?

나는 이것이 아주 기본적인 것을 알고,하지만 난 모두 레일 '과 루비의 문서를 검색하고, 나는 그것을 찾을 수 없습니다.

해결법

  1. ==============================

    1.당신은 객체의 클래스에 .name을 호출 할 :

    당신은 객체의 클래스에 .name을 호출 할 :

    result.class.name
    
  2. ==============================

    2.여기에 다니엘 Rikowski 및 pseidemann로 의견에서 추출한 정답은,입니다. 나는 정답을 찾기 위해 의견을 통해 잡초해야하는 피곤 해요 ...

    여기에 다니엘 Rikowski 및 pseidemann로 의견에서 추출한 정답은,입니다. 나는 정답을 찾기 위해 의견을 통해 잡초해야하는 피곤 해요 ...

    당신이 레일 (ActiveSupport)를 사용하는 경우 :

    result.class.name.demodulize
    

    당신은 POR (일반 올 - 루비)를 사용하는 경우 :

    result.class.name.split('::').last
    
  3. ==============================

    3.result.class.to_s 및 result.class.name 작업 모두.

    result.class.to_s 및 result.class.name 작업 모두.

  4. ==============================

    4.당신은 클래스 메소드, class.name 내부 또는 self.class.name에서 클래스 이름을 얻고 싶은 경우에 작동하지 않습니다. 클래스의 클래스가 클래스이기 때문에이, 그냥 출력 클래스 것이다. 대신, 당신은 단지 이름을 사용할 수 있습니다 :

    당신은 클래스 메소드, class.name 내부 또는 self.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!
    
  5. ==============================

    5.내 경우에는 내가 Module1의 같은 : class_name에있어 result.class.name 같은 것을 사용하는 경우. 그러나 우리는 class_name에, 사용을 원하는 경우

    내 경우에는 내가 Module1의 같은 : class_name에있어 result.class.name 같은 것을 사용하는 경우. 그러나 우리는 class_name에, 사용을 원하는 경우

    result.class.table_name.singularize

  6. from https://stackoverflow.com/questions/826210/how-do-i-get-the-name-of-a-ruby-class by cc-by-sa and MIT license