rails 3 - 多个控制器之间共享的代码 - 放在哪里?

use*_*335 9 model-view-controller ruby-on-rails-3

我有2个控制器需要一段代码,但不是全部.这种方法属于哪里?我已经阅读过有关帮助程序的内容,但这些内容似乎与视图相关的代码有关.有人提出了lib文件夹,但这似乎与控制器逻辑"相距太远",我在视图或模型中不需要它.有人遇到过那种问题吗?

Oma*_*shi 11

有三个选项,最简单的(尽管是最不干净的)是应用程序控制器.另外两个选项是共享父控制器

class FooController < FooBarParentController
   # code here  
end

class BarController < FooBarParentController
   # code here  
end
Run Code Online (Sandbox Code Playgroud)

用法取决于这些控制器的相关性.

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

module FooBarModule
  extend ActiveSupport::Concern

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

  module ClassMethods
    # all class methods here
  end

  # instance methods here
end
Run Code Online (Sandbox Code Playgroud)

这是所需的共享代码用于少数ad-hoc控制器的地方,或者如果您已经在使用上面的继承,并且此代码不完全适合此子集(因此尝试模拟多重继承).