如何为多个控制器定义模板

时间:2014-11-23 18:08:00

标签: ruby-on-rails ruby-on-rails-4 view controller actioncontroller

我有一些不错的精益控制器。为了进一步干掉它们,我希望它们能够共享视图:以便多个控制器使用相同的编辑和新视图。所以我创建了一个名为resources的模板目录,其中包含一个通用的editnew视图。

我有多个控制器,我想分享这些视图(他们有自己的节目模板和表格)。这些控制器中的每一个当前都继承自基础ResourceController。默认情况下,如果这些控制器中的任何一个缺少视图,Rails将跟随继承链查找视图,因此如果我的NewsItems控制器没有edit模板,Rails将自动查找其中一个resources。但是,我想删除所有这些控制器从单个控制器继承的需要。在我的情况下,这会在继承链中添加一个额外的控制器,这是我不想做的。我更愿意将控制器共享的资源内省移动到mixin中。

但是,这样做意味着Rails不再在resources视图目录中查找丢失的模板。

我不想在每个控制器中呈现相同的资源/编辑and资源/新模板,因此有没有办法声明哪个模板用于哪个操作一种陈述式的方式?最好是在mixin?

1 个答案:

答案 0 :(得分:2)

听起来你可能正在寻找prepend_view_path。所以你可以这样做,例如您在控制器中包含的MyResources关注模块:

module MyResources
  extend ActiveSupport::Concern

  included do
    prepend_view_path File.join('app', 'views', 'resources')
  end
end

然后,在您添加MyResources的任何控制器中,检查视图模板的第一个路径是app/views/resources/,然后是常用位置。