【问题标题】:Rails implicit render in templates from multiple controllersRails 在来自多个控制器的模板中隐式渲染
【发布时间】:2012-10-15 22:30:27
【问题描述】:

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

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

【问题讨论】:

  • @Malestor 哦,我怎么错过了,但是从你的问题 rails 中提出一个观点,从该控制器的视图目录中渲染部分(如果没有明确定义)所以如果我必须给出答案那我建议它作为一个有效的feature 而不是错误,因为它让我可以灵活地知道我的控制器中定义的对象的部分位于该控制器本身的视图目录内(直到明确定义)正确如果我错了

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


【解决方案1】:

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

这实际上是有道理的,因为 Rails 是一个 MVC 框架,如果您在不同的命名空间下创建一个控制器,那么您也会期望该控制器有单独的视图。考虑一下便利性,如果您想使用一些简单的命令快速启动一个应用程序,一个有帖子公共视图的应用程序和一个所有用于编辑的管理好东西的管理视图,您会期望有一个不同的目录存储所有管理员视图。

【讨论】:

    【解决方案2】:

    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文件夹中。

    如果您想使用不同的部分,您应该明确指定它。

    有关详细说明,请参阅 Rails 指南页面的布局和渲染中的 Rendering Collections 部分。

    【讨论】:

      猜你喜欢
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 2014-05-23
      • 2014-11-26
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多