2011-08-14 88 views
9

我有一段代码需要在我的两个控制器中,但不是全部。这种方法属于哪里? 我已阅读有关帮手,但这些似乎是与视图相关的代码。有人提出了lib文件夹,但这似乎与控制器逻辑“距离太远”,我并不需要它在视图或模型中。 有没有人遇到过这样的问题?rails 3 - 多个控制器之间共享的代码 - 在哪里放置它?

回答

11

有三个选项,最简单的(尽管是最不洁的)是应用程序控制器。其他两个选项是共享父控制器

class FooController < FooBarParentController 
    # code here 
end 

class BarController < FooBarParentController 
    # code here 
end 

使用情况取决于这些控制器的相关性。

最终的解决方案是一个模块

module FooBarModule 
    extend ActiveSupport::Concern 

    included do 
    # class level code 
    # before_filter .... 
    end 

    module ClassMethods 
    # all class methods here 
    end 

    # instance methods here 
end 

这是需要的共享代码是特设控制器屈指可数,或者如果你已经使用上面的继承和该代码完全不是那么回事适合这个子集(从而尝试模拟多重继承)。

+0

感谢您的帮助!最后的解决方案对我来说似乎是最灵活的,所以我想我会试试这个。你能解释一下我应该把这个代码放在哪里(在lib文件夹中的一个模块中?) – user573335

+0

我亲自把它放在控制器文件夹中。 –

+0

如果它专门针对此应用程序,请将其置于应用程序文件夹下(可能位于“模块”子目录中)。 lib文件夹更适用于非特定于应用程序的通用实用程序。 –

相关问题