3

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

所以我一直在学习rails,并且喜欢它的结构,但是一些术语让我感到困惑,我试图理解它,但无法理解它。很多人一直向我推荐 RailsGuides on Layouts and rendering,但我并不完全理解它,并认为它缺乏整体 Rails 结构的更广泛背景。

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

规格:

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

以. applicaiton.html.erb_ views/layouts它的文件路径位置告诉我它是一个“布局”,但是那些也位于其中的_navigation.html.erband_left.html.erb和etc....因为所有页面都共享这些,它们与它们处于同一级别 但这些具有前面的 _underscores在文件名中,所以 Rails 知道这些是“部分”,但它们也位于文件夹中,并且在文件夹中。那么它的名字是什么? _right.html.erbviews/layoutsapplication.html.erbviewslayout

上面的问题导致我不明白某人在说什么,因为我也可能没有相应地构建文件。范围问题(据我所知,当您调用render 'action'render 'file'等等时,rails 可以找到另一个控制器视图和操作)在使用rendervs content_for/时发挥作用yield。看看我的SO 问题,在 Geoff 的回答中,在他的评论中,当我问到“所以不可能使用其他观点的产量?”时,他的回答是“这当然不是意图”。

所以回到最初的问题,我不觉得这些是相互关联的。我对制作一个健壮的应用程序很感兴趣,并且我了解如何使用其他较小的框架来完成它,但我需要在更高的层次上了解 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
4

1 回答 1

6

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

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

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

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

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

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

  • 在你的布局目录中有部分是完全可以的。我一直都这样做。我这样做有两个原因。第一个是如果我想简单地使用我的 application.html.erb。一个很好的例子,我通常有一个 app/layouts/_google_analytics.html.erb 文件,其中包含用于设置 Google Analytics 的 JS/逻辑。有了这个,我可以调用render :partial => 'layouts/google_analytics'application.html.erb 并且很清楚发生了什么,但不那么混乱。这样做的另一个原因是如果我有多个布局。也许我有一个 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 中(注意文件名的细微变化)。哪个是对的?很难说。

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

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

然后,在您的视图文件中,您可以执行以下操作:

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

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

无论如何...希望有帮助。

于 2013-01-21T20:22:22.077 回答