从嵌套类中调用Ruby模块方法

时间:2011-03-16 14:00:21

标签: ruby-on-rails ruby

是否有替代从嵌套类调用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

如何在没有明确包含的情况下从SweeperOne中调用GroupSweeper的expire_cache方法?

感谢您的任何意见。

2 个答案:

答案 0 :(得分:0)

我可能错了,因为我自己对ruby很新,但是这个类可能不应该包含它本身所属的模块。

也许如果你用一个end关闭模块,包括它应该可以工作。

答案 1 :(得分:0)

你在这里有一些循环依赖。

  • GroupSweeper定义了一个嵌套类 of SweeperOne
  • SweeperOne包括 GroupSweeper

那不行。

回答你的ruby方法/嵌套类问题:

module MyModule
  def my_method
    puts "yo yo yo"
  end

  class MySweetClass
    def sweet_method
      puts "swweeeeeeeeeeeet"
    end
  end
end

你想打电话给MySweetClass的sweet_method,你会改成:

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

然而!我认为你在轨道扫地机方面走错了路。这个答案非常具有战术性,但我认为你应该提出一个关于你想要做什么关于铁轨扫地机的问题。