Ruby on rails 我应该把rails中多个控制器使用的方法放在哪里?

Ruby on rails 我应该把rails中多个控制器使用的方法放在哪里?,ruby-on-rails,ruby-on-rails-3,helper,Ruby On Rails,Ruby On Rails 3,Helper,我有一个管理员控制器和视图来管理管理员任务。其中许多任务与在我的两个主要模型支持控制器(用户和材料)中执行的任务非常相似。我想把我的代码弄干,所以我想把它放在某个地方,但是放在哪里呢 例如: 作为管理员,我可以从管理员视图中删除材料,但用户也可以从材料视图中删除材料。我在admin和material控制器中对此有几乎相同的代码,唯一的例外是重定向到不同的位置。如果AdminsController是从UsersController继承的,您可以将这些方法放在UsersController中,判断与

我有一个管理员控制器和视图来管理管理员任务。其中许多任务与在我的两个主要模型支持控制器(用户和材料)中执行的任务非常相似。我想把我的代码弄干,所以我想把它放在某个地方,但是放在哪里呢

例如:


作为管理员,我可以从管理员视图中删除材料,但用户也可以从材料视图中删除材料。我在admin和material控制器中对此有几乎相同的代码,唯一的例外是重定向到不同的位置。

如果AdminsController是从UsersController继承的,您可以将这些方法放在UsersController中,判断与
super
之前的方法参数或控制器名称或代码的差异

如果Admin和User没有继承,您可以创建一个单独的模块,让Admin和User都包含它。

Rails4将使用,即使正在进行。尽管如此,我还是喜欢这种方法,尽管它更多的是关于模型而不是控制器

一个简单的例子 如果您在Rails 3上(如标签所示),只需将
关注点
-文件夹添加到
控制器
-文件夹中,并将其添加到自动加载路径:

#config/application.rb
config.autoload_paths += %W(#{config.root}/app/controllers/concerns)
例如,在
app/controllers/concerns/can\u cannizer.rb

module CanCanSanitizer
  extend ActiveSupport::Concern

  included do
    before_filter do
      resource = controller_path.singularize.gsub('/', '_').to_sym
      method = "#{resource}_params" 
      params[resource] &&= send(method) if respond_to?(method, true)
    end
  end
end
与任何其他模块一样,我将其包括在我的应用程序\u控制器中:

include CanCanSanitizer
诚然,这不是最好的用例,但它应该给您一个起点