** Использование Rails: 3.2.1, Ruby: ruby 1.9.3p0 (2011-10-30 ревизия 33570) [i686-linux] **
В моем модуле у меня есть один частный метод экземпляра (get_tables_of_random_words) и одна функция модуля (get_random_word).
Из моего контроллера Rails я вызываю функцию модуля, и она работает без проблем.Однако, когда я вызываю частный метод экземпляра модуля, который тоже вызывается без каких-либо проблем.
Может кто-нибудь объяснить, пожалуйста, причину такого поведения и как достичь желаемой функциональности. Я не хочу, чтобы мойМетоды частного экземпляра модуля, вызванные из класса, который включает в себя мой модуль. Мой метод частного экземпляра - это служебный метод, который необходим для работы только внутри модуля.
Util :: 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 (Scaffold генерирует настроенный контроллер)
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
Ниже приведены подходы, которые я пробовал, но они не работали должным образом.Ссылка: Методы закрытого модуля в Ruby
Util :: RandomWordsUtil (пробный подход-1) # get_tables_of_random_words не удалось найти Ошибка из метода get_random_word выдается ошибка
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
Util :: RandomWordsUtil (Tried Approach-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
Спасибо,
Джинеш