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



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

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

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

我不想在每个控制器中呈现相同的"资源/编辑and资源/新"模板,那么有没有办法以声明方式声明哪个模板用于哪个操作?最好在混合中?

听起来你可能正在寻找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/ ,后跟通常的位置。

最新更新