복붙노트

[RUBY-ON-RAILS] 레일의 보호 및 개인 방법

RUBY-ON-RAILS

레일의 보호 및 개인 방법

방법 루비의 가시성 (공개, 보호, 민간 방법)도이 블로그 게시물에 같은 장소에서 설명하고있다. 그러나 루비 온 레일즈에 그것 때문에 프레임 워크가 설정되는 방식의 일반 루비 응용 프로그램에서 것보다 약간 다른 것 같다. 경우에 따라서 레일에 모델, 컨트롤러, 헬퍼, 테스트, 등, / 그것은 보호 또는 개인 방법을 사용하는 것이 적절하지 않다?

편집 : 지금까지 답변 주셔서 감사합니다. 나는 보호와 루비 민간의 개념을 이해하지만, 나는 더 많은 가시성 이러한 유형은 레일 응용 프로그램의 다양한 조각의 컨텍스트 내에서 사용되는 일반적인 방법에 대한 설명을 찾고 있어요 (모델, 컨트롤러, 헬퍼, 테스트) . 예를 들어, 공공 컨트롤러 방법은 액션 메소드, 필요는 등 여러 컨트롤러에 의해 액세스 할 수있는 응용 프로그램 컨트롤러의 보호 방법 "헬퍼 방법"에 사용되는은

해결법

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

    1.모델의 경우 아이디어는 public 메소드는 클래스의 공용 인터페이스 있다는 것입니다. 공공 방법은 보호하면서, 다른 개체에 의해 사용하기위한 것입니다 / 개인 방법은 외부에서 숨길 수 있습니다.

    모델의 경우 아이디어는 public 메소드는 클래스의 공용 인터페이스 있다는 것입니다. 공공 방법은 보호하면서, 다른 개체에 의해 사용하기위한 것입니다 / 개인 방법은 외부에서 숨길 수 있습니다.

    이것은 다른 객체 지향 언어에서와 같은 방법입니다.

    당신이 원하는대로 컨트롤러 및 테스트의 경우, 단지 않습니다. 두 컨트롤러 및 테스트 수업은 프레임 워크 (예, 난 당신이 이론적으로보기에서 컨트롤러를 얻을 수 있습니다 알고 있지만, 그렇게 할 경우, 뭔가 이상한 어쨌든)에 의해 인스턴스화라고합니다. 아무도 직접 그 일을 만들 것 때문에,에 대해 "보호"에 아무것도 없습니다.

    부록 / 수정 : 컨트롤러의 경우, 당신은 자신을 공개한다 보호 개인 만 행동으로 "도우미"방법을 표시해야합니다. 프레임 워크 것이다 결코 경로 행동 / 도우미 방법은 그 방법으로 보호되어야하므로, 공공없는 방법에 들어오는 HTTP 호출.

    메소드가 보호 또는 개인 경우 그들은 항상 "직접"라고 때문에 도우미의 경우는,도 마찬가지입니다.

    그것은 물론, 당신이 이해하기 쉽게 물건을 만드는 경우는 모든 경우에 보호 물건을 표시 할 수 있습니다.

  2. ==============================

    2.더 다른 하나를 제외한 자기 방법을 사용하지하려는 경우 개인 방법을 사용합니다. 당신이 뭔가를 단지 자신과의 is_a을 원하는 경우 보호 방법을 사용?의 (자기)가 호출 할 수 있습니다.

    더 다른 하나를 제외한 자기 방법을 사용하지하려는 경우 개인 방법을 사용합니다. 당신이 뭔가를 단지 자신과의 is_a을 원하는 경우 보호 방법을 사용?의 (자기)가 호출 할 수 있습니다.

    당신이 "가상"초기화 방법이 있다면 보호의 좋은 사용은있을 수 있습니다.

    class Base
        def initialize()
            set_defaults()
            #other stuff
        end
    
        protected
        def set_defaults()
            # defaults for this type
            @foo = 7
            calculate_and_set_baz()
        end
    
        private
        def calculate_and_set_baz()
            @baz = "Something that only base classes have like a file handle or resource"
        end
    end
    
    class Derived < Base
        protected
        def set_defaults()
            @foo = 13
        end
    end
    

    @foo는 다른 값을 가질 것이다. 및 파생 인스턴스는 @baz가 없습니다

    최신 정보: 내가 쓴 이후, 몇 가지 루비에서 변경된 2.0 아론 패터슨 http://tenderlovemaking.com/2012/09/07/protected-methods-and-ruby-2-0.html까지 훌륭한 기록을 가지고

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

    3.http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes#Declaring_Visibility

    http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes#Declaring_Visibility

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

    4.당신은 방법에 적용되는 클래스 가시성의 의미 (공개 / 보호 / 개인)의 좋은 아이디어를 갖고있는 것 같다. 내가 제공 할 수있는 모든 내 레일 애플 리케이션에서 그것을 구현하는 방법에 대한 간단한 개요입니다.

    당신은 방법에 적용되는 클래스 가시성의 의미 (공개 / 보호 / 개인)의 좋은 아이디어를 갖고있는 것 같다. 내가 제공 할 수있는 모든 내 레일 애플 리케이션에서 그것을 구현하는 방법에 대한 간단한 개요입니다.

    그들이 전화를받을 수 있도록 나는 필터를 통해 어떤 컨트롤러가 기본 응용 프로그램 컨트롤러의 메소드를 보호 구현할 (예를 들어, before_filter : method_foo). 비슷한 방법으로, 나는 그들이 모든 상속에서 기본 모델에 모두에 사용하려는 모델 방법을 보호 정의합니다.

  5. ==============================

    5.행동이 컨트롤러의 공개 방법 할 필요가 있지만, 모든 public 메소드는 반드시 작업입니다. 컨트롤러 / : 액션 / : 당신은 / 같은 포괄 경로를 사용하는 경우 hide_action를 사용할 수있는 ID를하거나 무효 인 경우 (레일 3의 기본값)를 명시 적 경로 만 방법이 호출됩니다.

    행동이 컨트롤러의 공개 방법 할 필요가 있지만, 모든 public 메소드는 반드시 작업입니다. 컨트롤러 / : 액션 / : 당신은 / 같은 포괄 경로를 사용하는 경우 hide_action를 사용할 수있는 ID를하거나 무효 인 경우 (레일 3의 기본값)를 명시 적 경로 만 방법이 호출됩니다.

    당신은 액체 템플릿 엔진과 같은 다른 라이브러리에 컨트롤러 인스턴스를 전달하는 경우에 당신은 당신의 액체 필터와 태그 전송을 사용하는 것보다 오히려 공용 인터페이스를 제공 할 수 유용 할 수 있습니다.

  6. from https://stackoverflow.com/questions/4495078/protected-and-private-methods-in-rails by cc-by-sa and MIT license