我有代码喜欢render @posts
在呈现的索引模板中呈现我的帖子集合PostsController
。
现在我有一个Admin::PostsController
也应该呈现集合,但是当我的帖子控制器呈现@posts
它时,它会寻找admin/posts/_post.html.erb
部分。我现在必须明确写出部分路径吗?此功能是设计使然还是错误?这似乎没有意义。
我有代码喜欢render @posts
在呈现的索引模板中呈现我的帖子集合PostsController
。
现在我有一个Admin::PostsController
也应该呈现集合,但是当我的帖子控制器呈现@posts
它时,它会寻找admin/posts/_post.html.erb
部分。我现在必须明确写出部分路径吗?此功能是设计使然还是错误?这似乎没有意义。
是的,您需要明确提供路径。是的,这是设计使然。
这实际上是有道理的,因为 Rails 是一个 MVC 框架,如果您在不同的命名空间下创建一个控制器,人们也会期望该控制器有单独的视图。考虑一下便利性,如果您想使用一些简单的命令快速启动一个应用程序,一个有帖子公共视图的应用程序和一个所有用于编辑的管理好东西的管理视图,您会期望有一个不同的目录存储所有管理员视图。
render @posts
是更长方法签名的快捷方式。
如果是PostsController
,它是 ; 的捷径render :partial => "post", :collection => @posts
。部分是_post.html.erb
,预计在app/views/posts
文件夹中。
如果是Admin::PostsController
,它是 ; 的捷径render :partial => "admin#post/post", :collection => @posts
。部分是_post.html.erb
,并且预计在app/views/admin/posts
文件夹中。
如果您想使用不同的部分,您应该明确指定它。
有关详细说明,请参阅Rendering Collections
Rails 指南页面的布局和渲染部分。