복붙노트

[RUBY-ON-RAILS] 루비에 낙타 표기법에 snake_case에서 문자열 변환

RUBY-ON-RAILS

루비에 낙타 표기법에 snake_case에서 문자열 변환

나는 낙타 케이스에 뱀 케이스에서 이름을 변환하려합니다. 어떤 내장 된 방법이 있습니까?

예 : "APPUSER"을 "app_user"

(나는 그 APPUSER 모델로 변환 할 문자열 "app_user"가).

해결법

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

    1.당신이 레일을 사용하는 경우 문자열 #의 camelize은 당신이 찾고있는 것입니다.

    당신이 레일을 사용하는 경우 문자열 #의 camelize은 당신이 찾고있는 것입니다.

      "active_record".camelize                # => "ActiveRecord"
      "active_record".camelize(:lower)        # => "activeRecord"
    

    당신이 실제 클래스를 얻고 싶은 경우에, 당신은 그 꼭대기에 문자열 #의 constantize를 사용해야합니다.

    "app_user".camelize.constantize
    
  2. ==============================

    2.이건 어때?

    이건 어때?

    "hello_world".split('_').collect(&:capitalize).join #=> "HelloWorld"
    

    여기에 코멘트에서 찾았 분류 루비 문자열

    웨인 콘래드에 의해 코멘트를 참조하십시오

  3. ==============================

    3.당신이 레일 사용하는 경우, 사용 분류합니다. 그것은 잘 가장자리 경우를 처리합니다.

    당신이 레일 사용하는 경우, 사용 분류합니다. 그것은 잘 가장자리 경우를 처리합니다.

    "app_user".classify # => AppUser
    "user_links".classify   # => UserLink
    

    노트 :

    이 답변은 (는 질문 제목에 특정되지 않습니다) 질문에 주어진 설명에 따라 다릅니다. 하나는 낙타 경우에 문자열로 변환하려고하면 그들은 세르지오의 답변을 사용해야합니다. 그는 APPUSER (하지 App_user), 따라서이 답변에 app_user 변환하고 싶어 질문자 상태 ..

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

    4.출처 : http://rubydoc.info/gems/extlib/0.9.15/String#camel_case-instance_method

    출처 : http://rubydoc.info/gems/extlib/0.9.15/String#camel_case-instance_method

    목적을 학습 :

    class String
      def camel_case
        return self if self !~ /_/ && self =~ /[A-Z]+.*/
        split('_').map{|e| e.capitalize}.join
      end
    end
    
    "foo_bar".camel_case          #=> "FooBar"
    

    그리고 소문자 변형에 대한 :

    class String
      def camel_case_lower
        self.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
      end
    end
    
    "foo_bar".camel_case_lower          #=> "fooBar"
    
  5. ==============================

    5.나는 순수 루비 코드로 할 내가 생각했던 모든 가능성을했다, 여기에 그들이있다 :

    나는 순수 루비 코드로 할 내가 생각했던 모든 가능성을했다, 여기에 그들이있다 :

    그리고 여기이 모든에 대한 벤치 마크, 우리는 GSUB이에 대한 아주 나쁜 것을 볼 수 있습니다. 나는 126 개 080 단어를 사용했다.

                                  user     system      total        real
    capitalize and gsub  :      0.360000   0.000000   0.360000 (  0.357472)
    split and map, with &:      0.190000   0.000000   0.190000 (  0.189493)
    split and map        :      0.170000   0.000000   0.170000 (  0.171859)
    
  6. ==============================

    6.나는 뱀 케이스에 낙타 케이스에서가는 질문의 역을 찾고 여기 있어요. 그에 대한 사용 밑줄 (decamelize되지 않음) :

    나는 뱀 케이스에 낙타 케이스에서가는 질문의 역을 찾고 여기 있어요. 그에 대한 사용 밑줄 (decamelize되지 않음) :

    AppUser.name.underscore # => "app_user"

    또는, 이미 낙타 경우 문자열이있는 경우 :

    "APPUSER".underscore # => "app_user"

    또는, 당신은 당신이 뱀 케이스 싶어 이유는 아마도 테이블 이름을 얻으려면 :

    AppUser.name.tableize # => "app_users"

  7. ==============================

    7.나는 여기에 추가 답변을 추가하는 약간의 불안을 느낍니다. ULYSSE-BN @에서 좋은 벤치 마크를 무시하고, 가장 읽을 수있는 최소한의 순수 루비 접근 가기로 결정. 클래스 모드 @ user3869936의 사본 인의 : :하지만 방법 모드 내가 여기에 다른 대답에 표시되지 않습니다.

    나는 여기에 추가 답변을 추가하는 약간의 불안을 느낍니다. ULYSSE-BN @에서 좋은 벤치 마크를 무시하고, 가장 읽을 수있는 최소한의 순수 루비 접근 가기로 결정. 클래스 모드 @ user3869936의 사본 인의 : :하지만 방법 모드 내가 여기에 다른 대답에 표시되지 않습니다.

      def snake_to_camel_case(str, mode: :class)
        case mode
        when :class
          str.split('_').map(&:capitalize).join
        when :method
          str.split('_').inject { |m, p| m + p.capitalize }
        else
          raise "unknown mode #{mode.inspect}"
        end
      end
    

    결과는 다음과 같습니다

    [28] pry(main)> snake_to_camel_case("asd_dsa_fds", mode: :class)
    => "AsdDsaFds"
    [29] pry(main)> snake_to_camel_case("asd_dsa_fds", mode: :method)
    => "asdDsaFds"
    
  8. ==============================

    8.여기에 나열된 다른 방법의 대부분은 레일 다릅니다. 당신이 순수 루비와 함께이 작업을 수행 할 원하는 경우, 다음은 내가 가지고 올 것 중 가장 간결한 방법이다 (덕분에 ULYSSE-BN 제안 된 개선 @)

    여기에 나열된 다른 방법의 대부분은 레일 다릅니다. 당신이 순수 루비와 함께이 작업을 수행 할 원하는 경우, 다음은 내가 가지고 올 것 중 가장 간결한 방법이다 (덕분에 ULYSSE-BN 제안 된 개선 @)

    x="this_should_be_camel_case"
    x.gsub(/(?:_|^)(\w)/){$1.upcase}
        #=> "ThisShouldBeCamelCase"
    
  9. ==============================

    9.순수 루비에서는 레일 .camelize에서 동일한 코드를 사용하여 문자열 클래스를 확장 할 수

    순수 루비에서는 레일 .camelize에서 동일한 코드를 사용하여 문자열 클래스를 확장 할 수

    class String
      def camelize(uppercase_first_letter = true)
        string = self
        if uppercase_first_letter
          string = string.sub(/^[a-z\d]*/) { |match| match.capitalize }
        else
          string = string.sub(/^(?:(?=\b|[A-Z_])|\w)/) { |match| match.downcase }
        end
        string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub("/", "::")
      end
    end
    
  10. from https://stackoverflow.com/questions/9524457/converting-string-from-snake-case-to-camelcase-in-ruby by cc-by-sa and MIT license