2012-03-01 7 views
0

** 레일즈 사용 : 3.2.1, 루비 : 루비 1.9.3p0 (2011-10-30 수정 33570) [i686-linux] **rails 3.2.1 맞춤 모듈 컨트롤러에 의한 개인 인스턴스 메소드 액세스 제한

제 모듈에는 하나의 개인 인스턴스 메소드 (get_tables_of_random_words)와 모듈 함수 (get_random_word)가 있습니다.

내 Rails 컨트롤러에서 모듈 기능을 호출하는데 문제없이 작동합니다. 그러나 문제없이 호출되는 모듈의 private 인스턴스 메소드를 호출 할 때.

사람이 내 module.My 개인 인스턴스 방법은입니다 내 모듈의 개인 인스턴스 메소드가 포함 된 클래스에서 호출 를 얻기 위해 원하지 않는 desire.I 기능을 달성하기 위해 그런 행동 방법 뒤에 이유를 설명해 주시겠습니까 유틸리티 메서드 은 모듈 내부에서만 작업해야합니다.

백분율 :: RandomWordsUtil

module Util 
     module RandomWordsUtil 
      def get_tables_of_random_words 
       # Implementation here 
      end 

      private :get_tables_of_random_words 

      module_function 

      def get_random_word 
       # invoke get_tables_of_random_words 
      end 

     end 

    end 

GamesController 내가 시도했지만 원하는대로 작동하지 않은 방법은 다음과

 class GamesController < ApplicationController 

      include Util::RandomWordsUtil 

      # GET /games 
      # GET /games.json 
      def index 
      end 

      def play 
      @game = Game.find(params[:id]) 

      @random_word = get_random_word # This is a module_function 
      @random_table = get_tables_of_random_words # This I have marked as private in my module still it gets invoked! 

      # Render action show 
      render "show" 
      end 

      # GET /games/1 
      # GET /games/1.json 
      def show 
      end 

      # GET /games/new 
      # GET /games/new.json 
      def new 
      end 

      # GET /games/1/edit 
      def edit 
      end 

      # POST /games 
      # POST /games.json 
      def create 
      end 

      # PUT /games/1 
      # PUT /games/1.json 
      def update 
      end 

      # DELETE /games/1 
      # DELETE /games/1.json 
      def destroy 
      end 
     end 

(비계는 컨트롤러 - 사용자 정의를 생성). 참조 : Private module methods in Ruby

백분율 :: RandomWordsUtil #의 get_tables_of_random_words는 오류가 get_random_word 방법에서하라는 메시지가 표시됩니다 찾을 수 없습니다 (접근-1 시도)

module Util 
     module RandomWordsUtil 
      def self.included(base) 
       class << base 
        def get_tables_of_random_words 
         # Implementation here 
        end 

        private :get_tables_of_random_words 
       end 
      end 

      module_function 

      def get_random_word 
       # invoke get_tables_of_random_words 
      end 

     end 

    end 

백분율 :: RandomWordsUtil (시도 접근-2) # 정의되지 않은 지역 변수 또는 메서드 'get_random_word'를 말하는 컨트롤러에서 오류 메시지가 표시됩니다.

module Util 
     module RandomWordsUtil 
      def self.included(base) 
       class << base 
        def get_random_word 
         # invoke get_tables_of_random_words 
        end 

        private 
        def get_tables_of_random_words 
         # Implementation here 
        end 

       end 
      end 
     end 
    end 

고마워,
지그니쉬

답변

0

나는 모듈을 "포함"할 때 믹스 인으로 만들어서 그 안에있는 모든 메소드가 클래스의 메소드가되도록한다고 생각한다. 대신에 "요구"하려고 했습니까?

+0

예 모듈을 필요로했는데 오류가 발생했습니다. 해당 파일을로드 할 수 없습니다. 파일의 경로를 올바르게 지정하지 않았을 수 있습니다. 레일스 응용 프로그램에서 유틸리티 모듈은 lib/util/. 모듈을 사용하기 위해 컨트롤러에서 require 메소드로 어떤 경로를 사용해야하는지 알 수 없었습니다. http://stackoverflow.com/questions/3356742/best-way-to-load-module-class-from-lib-folder-in-rails-3에서 ben_h의 Mike Fischer에 대한 의견은 require를 내부에서 사용하지 않아야한다고 말합니다. 레일 앱. –

+0

링크를 추적하여 찾았습니다. \t config.autoload_paths + = Dir [ "# {config.root}/lib/** /"] # 모든 서브 디렉토리를 포함하십시오 # - 그게 효과가 있습니까? – Carilda

+0

예 내 config/application.rb의 현재 설정은 다음과 같습니다. config.autoload_paths + Dir [ "# {config.root}/lib/** /"]이 작동하고 있습니다. –