【问题标题】:Rails: Nested views or partials or..?Rails:嵌套视图或局部视图或..?
【发布时间】:2012-12-07 20:29:52
【问题描述】:

我是 Ruby on Rails 的新手,我来自 Drupal/PHP 背景。

我正在尝试做一些简单的事情。用于某些页面(例如关于我们、免责声明等)的“静态”控制器和用于视频的“视频”控制器。

整个应用程序具有相同的外观。我正在尝试弄清楚如何避免重复视图。

在drupal中,主题是这样的: html.tpl.php(渲染 page.tpl.php) - page.tpl.php(渲染多个block.tpl.php) - block.tpl.php(渲染更多嵌套的tpls或一些由主题函数生成的html)。

我觉得这很棒。

在rails中,我读到的是application.html.erb(我认为它类似于Drupal的html.tpl.php,因为它通常包含整个应用程序中可用的样式表、js等)称为“布局”。然后是“视图”,它在此布局中“产生”内容。我们在控制器中指定视图,或者它会自动获取一个。我认为视图是 Drupal 的“page.tpl.php”。

我的大部分网站都使用相同的结构,即页眉、顶部菜单、内容、右侧边栏、页脚。但是每个区域的内容会根据路径而变化。所以我想这样做:

  • “静态”和“视频”都将调用相同的视图,具有不同的变量值,即内容区域和侧边栏的值。
  • 此视图将使用“渲染”来渲染另一个视图,其中包含从控制器传递的变量子集,即它将渲染内容和侧边栏视图。
  • 如果需要,这些视图将呈现更多视图,依此类推。

我读到的另一个是partials。我似乎无法区分在另一个视图中渲染视图和渲染部分视图。

哪种方法更好?还是有更好的“Rails Way”?

【问题讨论】:

标签: ruby-on-rails model-view-controller partials theming


【解决方案1】:

这是一个相当大的话题,但编辑过的重点是

如果您想在每个页面上重复内容,例如标题或导航栏,请将其放入 layouts/application.html.erb

如果您想让视图与特定于该页面的内容保持一致,那么您可以使用局部视图。通常在视图中我创建一个名为 shared 的文件夹,然后将我的部分放在那里。例如,如果我保存一个名为 _form.html.erb 的部分(确保在文件名的开头使用下划线命名部分),然后我会在我的视图中调用它,如

<%= render 'shared/form' %>

您还可以在布局/应用程序文件中使用部分文件来保持整洁

这只是我的做法,我相信更有经验的 Rails 人有更好的方法

希望对你有帮助,还有什么问题就问吧

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2013-11-20
    • 2011-12-26
    相关资源
    最近更新 更多