rails 3.2.1 пользовательский модуль ограничивает доступ к частным методам экземпляра контроллером - PullRequest
0 голосов
/ 02 марта 2012

** Использование 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

Спасибо,
Джинеш

1 Ответ

0 голосов
/ 02 марта 2012

Я думаю, что когда вы «включаете» модуль, вы делаете его смешанным, так что все методы в нем становятся методами класса, включая его.Вы пробовали вместо этого «требовать»?

...