我的2个控制器中需要一段代码,但不是全部。这种方法属于哪里? 我已经阅读过有关帮助程序的内容,但这些内容似乎与视图相关的代码有关。有人提出了lib文件夹,但这似乎与控制器逻辑“相距太远”,我在视图或模型中不需要它。 有人遇到过那种问题吗?
答案 0 :(得分: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
这是少数ad-hoc控制器所需的共享代码,或者如果您已经在使用上面的继承,并且此代码不完全适合此子集(因此尝试模拟多重继承)。< / p>