Rails隐式呈现来自多个控制器的模板

时间:2012-10-25 17:06:49

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我有render @posts之类的代码,可以在PostsController呈现的索引模板中呈现我的帖子集合。

现在我有Admin::PostsController也应该呈现集合,但当我的帖子控制器呈现@posts时,它会查找admin/posts/_post.html.erb部分。我现在必须写部分路径表达吗?这个功能是设计还是错误?它似乎没有意义。

2 个答案:

答案 0 :(得分:1)

是的,您需要明确提供路径。是的,这是设计的。

它实际上是有道理的,因为Rails是一个MVC框架,如果你在一个不同的命名空间下创建一个控制器,人们也会期望该控制器有单独的视图。想想方便,如果你想用一些简单的命令快速启动一个应用程序,一个公开查看帖子的应用程序和一个管理视图,其中所有的管理好东西都要编辑,你会期望有一个用于存储所有管理员视图的不同目录。

答案 1 :(得分:0)

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部分。渲染详细说明。