Вызов методов модуля Ruby из вложенного класса в - PullRequest
2 голосов
/ 16 марта 2011

Есть ли альтернатива вызову метода Module из вложенного класса? Код:

module GroupSweeper

  def expire_cache(paths)
    paths.each do |path|
      expire_page(path)
    end
  end

  class SweeperOne < ActionController::Caching::Sweeper
    include GroupSweeper
    observe Subject
    def after_save(subject)
      expire_cache([root_path,subjects_path])
    end
    def after_destroy(subject)
      expire_cache([root_path,subjects_path])
    end 
  end

end

Как я могу вызвать метод expire_cache GroupSweeper из SweeperOne без явного включения его?

Спасибо за любой вклад.

Ответы [ 2 ]

0 голосов
/ 16 марта 2011

У вас здесь есть некоторые циклические зависимости.

  • GroupSweeper определяет вложенный класс SweeperOne
  • SweeperOne включает в себя GroupSweeper

Это не сработает.

Чтобы ответить на ваш метод ruby ​​/ вопрос вложенного класса:

module MyModule
  def my_method
    puts "yo yo yo"
  end

  class MySweetClass
    def sweet_method
      puts "swweeeeeeeeeeeet"
    end
  end
end

И вы хотите вызвать sweet_method MySweetClass, вы должны измениться на:

module MyModule
  def my_method
    puts "yo yo yo"
    MySweetClass.new.sweet_method
  end

  class MySweetClass
    def sweet_method
      puts "swweeeeeeeeeeeet"
    end
  end
end

#....

class MyClass
  include MyModule
end

MyClass.new.my_method

Тем не менее! Я думаю, что вы на неправильном пути в отношении подметальных машин для рельсов. Этот ответ очень тактичен, но я думаю, что вам следует задать вопрос о том, что вы пытаетесь сделать с подметально-уборочными машинами.

0 голосов
/ 16 марта 2011

Я могу ошибаться, поскольку я сам новичок в ruby, но класс, вероятно, не должен включать модуль, частью которого он сам является.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...