【问题标题】:An alternate explanation to rails Layouts, Rendering, Partials, Templates, and Viewsrails Layouts, Rendering, Partials, Templates, and Views的另一种解释
【发布时间】:2013-01-03 23:49:09
【问题描述】:

编程新手,但我已经完成了一些巧妙的工作。但鉴于我的非传统方法,我有时会对涉及大量假设的“传统”教义感到沮丧和困惑。

所以我一直在学习rails,并且喜欢它的结构,但是有一些terminology is confusing me,我有tried to understand it,但无法理解它。很多人一直把我推荐给RailsGuides on Layouts and rendering,但我并不完全理解它,并认为它缺乏整体rails结构的更广泛背景。

那么,您是否知道任何描述整个过程和术语的 Rails 解释网站/文档/视频/书籍,更具体地说,是那些说明布局、渲染、局部和视图如何工作的 Rails 处理?

具体说明:

当试图理解它们之间的关系时,术语会变得混乱。以PJAX RailsCast 为例,Bates 明确表明它们是布局和模板之间的差异。当我试图通过this SO question 完成this 时,我迷失在文件的常规结构和命名及其功能中(不是每个人,只是那些似乎在命名上超载的那些)。

views/layouts 中的applicaiton.html.erb 文件为例。它的文件路径位置告诉我它是一个“布局”,但是_navigation.html.erb_left.html.erb_right.html.erb 等也位于views/layouts 中,因为所有页面都共享这些,它们与application.html.erb 处于同一级别,但它们在文件名中具有前面的_下划线,因此Rails 知道它们是“部分”,但它们也位于views 文件夹和layout 文件夹中。那么它的名字是什么?

上述问题使我无法理解某人在说什么,因为我也可能没有相应地构建文件。范围问题(据我所知,当您调用 render 'action'render 'file' 等时,rails 可以找到另一个控制器视图和操作)使用 rendercontent_for/yield。看看我的SO question here,在 Geoff 的回答中,在他的 cmets 中,当我问“所以不可能使用来自其他观点的产量?”时,他的回答是“这当然不是意图”。

所以回到最初的问题,我不认为这些是相互关联的。我对制作一个健壮的应用程序很感兴趣,并且我了解如何使用其他较小的框架来完成它,但我需要在更高的层次上了解 Rails 如何使用布局、部分、模板和视图,以及应如何相应地构建文件。

我还想要描述它们的术语的图表或解释,以及它们与其他(用法、另一个的父/子)和常规放置的关系。这看起来像:

A view is what is presented to the user.   It is comprised of several parts.
  The following are required [ templates, layouts ].  
  These are not required, but very likely once you have a robust and
   flexible program [ partials, yields/content_for ].   

A layout is a framework ....

A Partial is content, but only "partial" of a page....

A rendered file is ... and is located in each model's view

【问题讨论】:

  • 讨厌加入俱乐部,但你真的应该仔细阅读官方的 Rails 指南,直到它点击。在书籍方面 - 使用 Rails 进行敏捷 Web 开发非常棒。
  • 我已经完成了三次,并且已经在外部构建了一些工作示例,但是我认为有些功能是好的做法,但没有很好地涵盖(在我看来),而且我离活跃的还有几个小时物理 RoR 社区。谢谢推荐书
  • 想一想,其他可能对您有所帮助的方法是学习 MVC 的基础知识,尤其是 VC 部分,不是在 Rails 的上下文中,而是在一般基础上。
  • 您的问题很笼统...如果不简单地向您介绍您不了解的文档,我不确定如何回答...您能否更新您的问题以包括一些让您感到困惑的具体问题?
  • @PhilipHallstrom 这有帮助吗?希望是这样,如果不是我会再试一次

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


【解决方案1】:

好的...这是我对事物的看法(呵呵)...请注意,有时当我说“X 是 Y”时,我真正的意思是“与 Rails 喜欢做的事情保持一致 X是 Y”.. 你可以违反这一点,但大多数人不会……此外,这些都不会触及在控制器中调用时“渲染”的工作方式。那完全是另外一团蜡。

  • 应用程序/视图中的所有内容都是“视图”。 “视图”是最终将被编译/渲染并显示给客户端(浏览器、第 3 方 api 等)的东西。

  • 任何以下划线开头的文件都是部分文件。它在应用程序/视图中的哪个位置无关紧要......它是部分的。

  • 任何 [其他] 文件都是诚实至善的观点。它可能是 HTML、XML、JSON、PDF……但它是一个视图。

  • app/views/layouts 中任何不以下划线开头的文件也是一个视图,但它是一个特殊的视图。这是一个布局。恕我直言,布局只是您要应用于所有视图的通用标记的“包装器”。你可以把它们想象成一个“模板”IF,你在“我为我的网站在线购买了一些高级 Web 模板”的意义上使用它。然而,“模板”在 Rails 中也有另一个含义。所以...尽量不要将这些布局文件视为模板。可以将它们视为“布局”。

  • 这些布局文件的独特之处在于它们在某处包含对<%= yield %> 的调用。就像在 Ruby 中一样,它产生了对其他事物的控制并被结果所取代。在 Rails 中,这意味着无论调用什么控制器/动作,该行都将替换为您的实际视图的结果(稍后会详细介绍)。

  • 在你的布局目录中有部分是完全可以的。我一直都这样做。我这样做有两个原因。第一个是如果我想简单地使用我的 application.html.erb。一个很好的例子,我通常有一个 app/layouts/_google_analytics.html.erb 文件,其中包含用于设置 Google Analytics 的 JS/逻辑。有了这个,我可以在 application.html.erb 中调用render :partial => 'layouts/google_analytics' 并且很清楚发生了什么,但不那么混乱。这样做的另一个原因是如果我有多个布局。也许我有一个 mobile.html.erb ——但我仍然需要 Google Analytics。现在我可以轻松地将“通用布局代码”包含在每个中。干了。

  • 至于其他文件的去向...将它们放在有意义的地方...通常很明显的地方,您会在构建更多应用程序时感受到它。您可以采用一些命名约定来使用更多的 Rails 魔法,但您不必这样做。例如..你可以像render @widgets这样调用,它会寻找一个_widget.html.erb部分并为@widgets中的每个元素渲染一次。不过,您不必这样做。

  • 共享部分?他们可以去任何地方。真的取决于你喜欢如何组织事物。很多人会创建应用程序/视图/共享并将它们放在那里。有些人会让他们保持“主要”关注点。也就是说...假设您有一个 _recent_blog_posts 部分被全部使用。你可以把它放在 app/views/shared/_recent_blog_posts.html.erb 中。您也可以争辩说它应该放在 app/views/blog/_recent_posts.html.erb 中(注意文件名的细微变化)。哪个是对的?很难说。

  • yield 和 content_for。默认情况下,Rails 在将视图标记插入布局时默认执行此操作。您可以假设 Rails 在处理您的视图时会自动执行content_for :default(或类似的操作),这就是yield 在您的布局中选择它的方式。但你也可以明确地做到这一点。假设您有一个网站部分(例如在右侧),您可能希望根据用户在您网站上的位置对其进行调整。在您的布局文件中,您可以执行以下操作:

    ...一些通用的右手边的东西...

然后,在您的视图文件中,您可以这样做:

... my main view content...
<% content_for :right_side do %>
  ... specific right side content stuff...
<% end %>

当所有这些结合在一起时,Rails 会将特定的右侧内容放入布局的右侧。

无论如何...希望对您有所帮助。

【讨论】:

  • 你能解释一下什么是模板吗?你说However, "template" has another meaning in Rails as well. 但不要跟进他们是什么
  • @chrisFrisina 我想我的主要意思是可以将布局文件视为“模板”。渲染方法“:template”还有一个可选参数。没什么大不了的,但它确实使水域变得浑浊。
猜你喜欢
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 2010-10-23
  • 2022-12-16
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多