Ruby on Rails/ActionView/布局文件
上一章解释了如何将输出渲染到默认布局或您提供的特殊布局。您可能已经查看过这样的布局文件。它的默认内容类似于
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Products: <%= controller.action_name %></title>
<%= stylesheet_link_tag 'scaffold' %>
</head>
<body>
<p style="color: green"><%= flash[:notice] %></p>
<%= yield %>
</body>
</html>
通常,布局的头部部分包含一个样式表的嵌入式标签,并且整个内容使用 yield 标签表示
所有资源标签,例如“stylesheet_link_tag”都是生成正确 HTML 的小助手。您可以使用这些标签来嵌入 CSS、Java Script 和图像或提供 RSS 提要。
要嵌入 Javascript 或 CSS,您可以使用相应的助手
<%= javascript_include_tag "my_javascript" %>
或者如果您想包含 CSS
<%= stylesheet_link_tag "my_css" %>
所有这些文件都位于 public 目录中public/javascripts或public/stylesheets。无需提供扩展名,Rails 会自动处理。要包含多个文件,只需在标签中提供所有文件名即可
<%= stylesheet_link_tag "my_css", "my_other_css" %>
当然,这些文件可以放置在应用程序的任何位置,只需确保提供正确的路径即可
<%= stylesheet_link_tag "my_css", "files/stylesheet" %>
要加载所有文件到您的public/javascripts或public/styleheets中,请使用带有:all
<%= javascript_include_tag :all %>
的相应标签。嵌入 CSS 时,您可以在标签中指定 media 属性
<%= stylesheet_link_tag "my_print", media => "print" %>
没有现代网站是完整的,没有使用图片和图形,所以 Rails 提供了自己的图像标签
<%= image_tag "my_image" %>
与 JavaScript 或 CSS 一样,Rails 默认情况下会查找public/images以找到合适的图片。**注意:**您无需告诉 Rails 您使用 .jpg、.gif 或 .png!您也可以提供自定义路径和 HTML 属性
<%= image_tag "images/my_image", :height => 50, :width => 50, :alt => "This is my image" %>
“yield”意味着这是一种占位符,用于显示在布局中的视图,但您不限于使用单个 yield
<body>
<%= yield :header %>
</body>
要访问:header,您可以使用“content_for”方法。因此,使用上面的示例,可能是
<% content_for :header do %>
<h1>Hello Rails - This is my header</h1>
<% end %>
命名 yield 可用于菜单、页脚或侧边栏,以简化维护。只需将它们放在您的代码中,它们就会被放置在正确的位置。
是时候更加 DRY 了。如果您有很多 HTML 代码在许多不同的视图中重复出现(例如 表单、动态菜单等),您可能需要考虑使用局部:使用局部,将您经常使用的代码移到一个单独的文件中,并在应该使用局部的文件中放置一个链接
<%= render :partial => "form" %>
这将在调用局部的文件夹中查找名为_form.html.erb的文件。在您的文件名中使用下划线以告诉 Rails 它是一个局部。
要将您的局部移动到一个单独的文件夹中,请使用
<%= render :partial => "partials/form" %>
将在“partials”中查找名为_form.html.erb
的文件。总的来说,局部可以最大限度地减少一遍又一遍地复制相同代码的工作量,但可以将所需的代码保存在单个文件中,这些文件可以轻松修改,并且可以根据需要使用。