** 레일즈 사용 : 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
고마워,
지그니쉬
예 모듈을 필요로했는데 오류가 발생했습니다. 해당 파일을로드 할 수 없습니다. 파일의 경로를 올바르게 지정하지 않았을 수 있습니다. 레일스 응용 프로그램에서 유틸리티 모듈은 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를 내부에서 사용하지 않아야한다고 말합니다. 레일 앱. –
링크를 추적하여 찾았습니다. \t config.autoload_paths + = Dir [ "# {config.root}/lib/** /"] # 모든 서브 디렉토리를 포함하십시오 # - 그게 효과가 있습니까? – Carilda
예 내 config/application.rb의 현재 설정은 다음과 같습니다. config.autoload_paths + Dir [ "# {config.root}/lib/** /"]이 작동하고 있습니다. –