我有一些不错的精益控制器。为了进一步干燥它们,我希望它们共享视图:以便多个控制器使用相同的编辑和新视图。因此,我创建了一个名为 resources 的模板目录,其中包含一个通用edit
和new
视图。
我有多个控制器,我想共享这些视图(它们有自己的显示模板和表单)。这些控制器中的每一个当前都继承自基本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/
,后跟通常的位置。