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
诚然,这不是最好的用例,但它应该给您一个起点