2014-10-18 5 views
0

У меня есть класс, который объявляет ряд методов экземплярадоступ метод экземпляра класса из метода экземпляра другого модуля

class User < Group 
    def get_name 

    end 

    def show_profile 

    end 

    def get_task(task_id) 
    #some logic 
    end 

end 

И я хочу, чтобы назвать некоторые из этих методов внутри модуля. Я могу сделать это с помощью инструкции Include.

Включает пользователей, которые вводят все методы из класса User. В этом случае я хочу только get_task и явно не хочу get_name, show_profile и т. Д.

У меня есть модуль задач, который также имеет множество методов, и один из этих методов вызывает метод get_task класса User.

module Tasks 
     class Project 
     def design 
      tid = 12 
      design_task = get_task(tid) 
     end 
     end 
    end 

Как это можно достичь без включения других ненужных методов этого класса. Пожалуйста помоги.

+0

Вы не включили класс, включили в него модуль. Что вы точно пытаетесь сделать? – Surya

+0

Да .. Вы правы. Извините. То, что я хочу достичь, - это вызвать метод get_task из метода Tasks :: Project # design. Извините. Только начинаю изучать метапрограммирование рубина. Так придумал такой сценарий. – rubyist

+0

Я думаю, что вы меня неправильно поняли, ваш код был правильным для модуля Task, теперь это не так. Мой комментарий был в ваших следующих строках: * include Users вводит все методы из класса User. В этом случае я хочу только get_task и явно не хочу get_name, show_profile и т. Д. * – Surya

ответ

0

Если метод get_task не зависит от пользователя, вы можете использовать метод класса, как показано ниже. Если это зависит от пользователя, вам нужно будет получить сервер, прежде чем вы сможете запустить этот метод.

class User < Group 
    def get_name 

    end 

    def show_profile 

    end 

    def self.get_task(task_id) 
    #some logic 
    end 

end 

class Project 
    def design 
     tid = 12 
     design_task = User.get_task(tid) 
    end 
end 
+0

Извините. Я не получил этот оператор «Если это зависит от пользователя, вам нужно будет получить сервер, прежде чем вы сможете запустить метод» – rubyist

+1

Если вы хотите, чтобы метод get_task делал что-то для экземпляра пользователя, вам нужно будет сначала получите пользователя, затем вызовите user_variable.get_task (tid). Если этот метод ничего не делает для конкретного экземпляра пользователя, вы можете использовать переменную класса. – user3803797

Смежные вопросы