2014-10-25 2 views
-1

config\initializers\string_class.rb에 현재 위치하는 string_class.rb 파일에 문자열 클래스를 원숭이 패치하는 몇 가지 기능이 있습니다. 코드는 다음과 같습니다 :이 클래스는 초기화 또는 LIB 폴더에 거주하는 경우는 울타리 오전rails 4 lib 폴더 대 initializers 폴더

class String 

    def capitalize_first_char 
    self.sub(/^(.)/) { $1.capitalize } 
    end 

    def capitalize_each_sentence 
    self.gsub(/([a-z])((?:[^.?!]|\.(?=[a-z]))*)/i) { $1.upcase + $2.rstrip } 
    end 

end 

아주 약간의 연구를 수행 한 후. 그래서 나는 이것에 대한 해답과 약간의 지침을 얻기 위해 동료 괴짜들을 찾는다.

+1

이외에도 문자열로 패치하기에 적합하지 않습니다. 그것들은 (아마) 전시 목적으로 만 사용됩니다. 'app/helpers/* _ helper.rb'에 도우미 함수를 작성해야합니다. – meagar

+0

@meagar 모든 컨트롤러와 뷰에서 사용할 수 있기를 바랍니다. 그러면 헬퍼가 제대로 작동할까요? –

+0

아니요, 헬퍼에게는 꽤 정상적인 요구 사항입니다. 만약 당신의 컨트롤러가 그것들을 필요로한다면'ApplicationController'에 메소드를 정의하면됩니다. 이것으로 모든 컨트롤러가 사용 가능한'ApplicationController'를 상속 한 것보다 더 쉽게 사용할 수 있습니다. 그런 다음 [helper_method : capitalize_first_char, : capitalize_each_sentence'] (http://apidock.com/rails/ActionController/Helpers/ClassMethods/helper_method)를 사용하여 헬퍼 메소드로 지정하면 모든 뷰에서 사용할 수 있습니다. . – meagar

답변

1

Rails 애플리케이션을 구축 할 때 일반적으로해야하는 일이 아니기 때문에, Rails 애플리케이션에 이러한 유형의 것들을 배치하는 좋은 장소는 없습니다. 거의 모든 스타일 가이드가 진행될 때 코어 클래스 패치는 expressly advised against입니다.

  • config/initializers이 작업을 수행하는 데 잘못된 장소 일 수 있습니다. 일반적으로이 앱에 대한 종속성을 설정하기위한, 그리고 대부분의 사람들은 코드가
  • lib 아마 더 좋은 장소입니다 핵심 클래스에 이상한 방법을 혼합이보고 생각하지 않겠지 만 자동으로 다시로드 기본적으로이 아니다
  • Gemfile? 이것이 String으로 패치할만한 가치가 있다면, 보석으로 증류하고 철저히 문서화 할 가치가 있습니다.

저는 개인적으로 문제를 회피하고 단순히 도우미 방법을 소개합니다. 도우미 메서드는 app/controllers/application_controller.rb에 정의하여 모든 컨트롤러에서 사용할 수 있도록 할 수 있습니다. 그런 다음 helper_method 함수를 사용하여 뷰에 대한 메서드를 사용할 수있게 만들 수 있습니다.

class ApplicationController < ActionController::Base 

    helper_method :capitalize_first_char, :capitalize_each_sentence 

    #... 

    protected 

    def capitalize_first_char(str) 
    str.sub(/^(.)/) { $1.capitalize } 
    end 

    def capitalize_each_sentence(str) 
    str.gsub(/([a-z])((?:[^.?!]|\.(?=[a-z]))*)/i) { $1.upcase + $2.rstrip } 
    end 
end 
+0

나는 이것이 어디에서 일어나는지를 좋아하지만, 마지막 질문이 하나있다. 이 도우미가 응용 프로그램 컨트롤러에 속해 있거나 응용 프로그램 도우미에 들어갈 수 있습니까? –

+0

@ meager 작동하도록했습니다. 잘못된 복사본과 붙여 넣기가있었습니다. 이것에 대한 도움을 주셔서 감사합니다. –

+1

@chrishough ApplicationHelper 메서드는 컨투어러에서 사용할 수 없으며 뷰에만 사용됩니다. 컨트롤러와 뷰 모두에서 필요하다면 컨트롤러에 들어가서'helper_method'를 통해 뷰에 제공되어야합니다. – meagar