2011-03-16 61 views
1

是否有替代方法從嵌套類調用Module方法?代碼:從嵌套類調用Ruby模塊方法

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 

我怎麼能叫GroupSweeper的expire_cache方法從SweeperOne中沒有明確地包括它?

感謝您的任何意見。

回答

0

你在這裏有一些循環依賴關係。

  • 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 

而且要撥打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 

但是!我認爲你對軌道清掃車的軌道是錯誤的。這個答案非常具有策略性,但我認爲你應該提出一個關於你在軌道清掃器上試圖做什麼的問題。

+0

謝謝。我原本試圖把我所有的清掃工一起放在一個文件裏。不過,我剛剛瞭解到,清掃工可以觀察到多個模型 - 所以我只需要一個模型。 – 2011-03-16 14:27:04

0

我可能是錯的,因爲我對ruby自己很新,但是這個類可能不包含它本身是其一部分的模塊。

也許如果你關閉模塊,包括end包括它從類應該工作。