** Rails :3.2.1 を使用、Ruby: ruby 1.9.3p0 (2011-10-30 リビジョン 33570) [i686-linux] **
私のモジュールには、1 つのプライベート インスタンス メソッド (get_tables_of_random_words) と 1 つのモジュール関数 (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 could not be found エラーは 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 (試したアプローチ-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
ありがとう、
ジグネッシュ