我有一些不错的精益控制器。为了进一步干掉它们,我希望它们能够共享视图:以便多个控制器使用相同的编辑和新视图。所以我创建了一个名为resources的模板目录,其中包含一个通用的edit
和new
视图。
我有多个控制器,我想分享这些视图(他们有自己的节目模板和表格)。这些控制器中的每一个当前都继承自基础ResourceController
。默认情况下,如果这些控制器中的任何一个缺少视图,Rails将跟随继承链查找视图,因此如果我的NewsItems控制器没有edit
模板,Rails将自动查找其中一个resources
。但是,我想删除所有这些控制器从单个控制器继承的需要。在我的情况下,这会在继承链中添加一个额外的控制器,这是我不想做的。我更愿意将控制器共享的资源内省移动到mixin中。
但是,这样做意味着Rails不再在resources
视图目录中查找丢失的模板。
我不想在每个控制器中呈现相同的资源/编辑and
资源/新模板,因此有没有办法声明哪个模板用于哪个操作一种陈述式的方式?最好是在mixin?
答案 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/
,然后是常用位置。