1 Action View 提供的 Helper 概述
WIP:这里没有列出所有的 Helper。完整列表请参阅 API 文档
以下仅是 Action View 中可用 Helper 的简要概述。建议您查阅 API 文档,其中详细介绍了所有的 Helper,但这应该是一个很好的起点。
1.1 AssetTagHelper
该模块提供了一些方法,用于生成将视图链接到图像、JavaScript 文件、样式表和 feeds 等资源的 HTML。
默认情况下,Rails 将链接这些资源到当前主机的 public 文件夹中,但您可以通过在应用程序配置中设置 config.asset_host
来指示 Rails 链接到来自专用资源服务器的资源,通常在 config/environments/production.rb
中设置。例如,假设您的资源主机是 assets.example.com
:
config.asset_host = "assets.example.com"
image_tag("rails.png")
# => <img src="http://assets.example.com/images/rails.png" />
1.1.1 auto_discovery_link_tag
返回一个链接标签,供浏览器和 feed 阅读器用于自动检测 RSS、Atom 或 JSON feed。
auto_discovery_link_tag(:rss, "http://www.example.com/feed.rss", { title: "RSS Feed" })
# => <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="http://www.example.com/feed.rss" />
1.1.2 image_path
计算 app/assets/images
目录中图像资源的路径。完整路径将通过文档根传递。image_tag
内部使用此方法构建图像路径。
image_path("edit.png") # => /assets/edit.png
如果将 config.assets.digest
设置为 true,则会在文件名中添加指纹。
image_path("edit.png")
# => /assets/edit-2d1a2db63fc738690021fedb5a65b68e.png
1.1.3 image_url
计算 app/assets/images
目录中图像资源的 URL。这将内部调用 image_path
并与当前主机或资源主机合并。
image_url("edit.png") # => http://www.example.com/assets/edit.png
1.1.4 image_tag
返回源的 HTML 图像标签。源可以是完整路径,也可以是存在于 app/assets/images
目录中的文件。
image_tag("icon.png") # => <img src="/assets/icon.png" />
1.1.5 javascript_include_tag
为提供的每个源返回一个 HTML 脚本标签。您可以传递存在于 app/assets/javascripts
目录中的 JavaScript 文件的文件名(.js
扩展名是可选的)以包含到当前页面中,或者您可以传递相对于文档根的完整路径。
javascript_include_tag "common"
# => <script src="/assets/common.js"></script>
1.1.6 javascript_path
计算 app/assets/javascripts
目录中 JavaScript 资源的路径。如果源文件名没有扩展名,将添加 .js
。完整路径将通过文档根传递。javascript_include_tag
内部使用此方法构建脚本路径。
javascript_path "common" # => /assets/common.js
1.1.7 javascript_url
计算 app/assets/javascripts
目录中 JavaScript 资源的 URL。这将内部调用 javascript_path
并与当前主机或资源主机合并。
javascript_url "common"
# => http://www.example.com/assets/common.js
1.1.8 stylesheet_link_tag
为指定的源返回一个样式表链接标签。如果不指定扩展名,将自动添加 .css
。
stylesheet_link_tag "application"
# => <link href="/assets/application.css" rel="stylesheet" />
1.1.9 stylesheet_path
计算 app/assets/stylesheets
目录中样式表资源的路径。如果源文件名没有扩展名,将添加 .css
。完整路径将通过文档根传递。stylesheet_link_tag
内部使用此方法构建样式表路径。
stylesheet_path "application" # => /assets/application.css
1.1.10 stylesheet_url
计算 app/assets/stylesheets
目录中样式表资源的 URL。这将内部调用 stylesheet_path
并与当前主机或资源主机合并。
stylesheet_url "application"
# => http://www.example.com/assets/application.css
1.2 AtomFeedHelper
1.2.1 atom_feed
该 Helper 使构建 Atom feed 变得简单。以下是一个完整的使用示例:
config/routes.rb
resources :articles
app/controllers/articles_controller.rb
def index
@articles = Article.all
respond_to do |format|
format.html
format.atom
end
end
app/views/articles/index.atom.builder
atom_feed do |feed|
feed.title("Articles Index")
feed.updated(@articles.first.created_at)
@articles.each do |article|
feed.entry(article) do |entry|
entry.title(article.title)
entry.content(article.body, type: 'html')
entry.author do |author|
author.name(article.author_name)
end
end
end
end
1.3 BenchmarkHelper
1.3.1 benchmark
允许您测量模板中块的执行时间,并将结果记录到日志中。将此块包装在昂贵的操作或可能成为瓶颈的操作周围,以获取操作的时间读数。
html+erb
<% benchmark "处理数据文件" do %>
<%= expensive_files_operation %>
<% end %>
这将在日志中添加类似于"处理数据文件 (0.34523)"的内容,您可以使用这个时间来比较优化代码时的时间。
1.4 CacheHelper
1.4.1 cache
这是一个用于缓存视图片段而不是整个操作或页面的方法。这种技术对于缓存菜单、新闻主题列表、静态HTML片段等片段非常有用。该方法接受一个包含您希望缓存的内容的块。有关更多信息,请参见AbstractController::Caching::Fragments
。
<% cache do %>
<%= render "shared/footer" %>
<% end %>
1.5 CaptureHelper
1.5.1 capture
capture
方法允许您将模板的一部分提取到一个变量中。然后您可以在模板或布局的任何地方使用这个变量。
<% @greeting = capture do %>
<p>欢迎!现在的日期和时间是 <%= Time.now %></p>
<% end %>
然后可以在其他地方使用捕获的变量。
<html>
<head>
<title>欢迎!</title>
</head>
<body>
<%= @greeting %>
</body>
</html>
1.5.2 content_for
调用content_for
将一块标记存储在一个标识符中以供以后使用。您可以通过将标识符作为参数传递给yield
来在其他模板或布局中调用存储的内容。
例如,假设我们有一个标准的应用程序布局,但也有一个特殊的页面需要特定的JavaScript,而其他页面不需要。我们可以使用content_for
在特殊页面上包含这个JavaScript,而不会使其他页面变得臃肿。
app/views/layouts/application.html.erb
<html>
<head>
<title>欢迎!</title>
<%= yield :special_script %>
</head>
<body>
<p>欢迎!现在的日期和时间是 <%= Time.now %></p>
</body>
</html>
app/views/articles/special.html.erb
<p>这是一个特殊页面。</p>
<% content_for :special_script do %>
<script>alert('你好!')</script>
<% end %>
1.6 DateHelper
1.6.1 distance_of_time_in_words
报告两个时间或日期对象或整数之间的大致时间间隔,单位为秒。如果要获得更详细的近似值,请将include_seconds
设置为true。
distance_of_time_in_words(Time.now, Time.now + 15.seconds)
# => 少于一分钟
distance_of_time_in_words(Time.now, Time.now + 15.seconds, include_seconds: true)
# => 少于20秒
1.6.2 time_ago_in_words
类似于distance_of_time_in_words
,但to_time
固定为Time.now
。
time_ago_in_words(3.minutes.from_now) # => 3分钟
1.7 DebugHelper
返回一个使用YAML转储的对象的pre
标签。这样可以以非常可读的方式检查对象。
my_hash = { 'first' => 1, 'second' => 'two', 'third' => [1, 2, 3] }
debug(my_hash)
<pre class='debug_dump'>---
first: 1
second: two
third:
- 1
- 2
- 3
</pre>
1.8 FormHelper
表单助手旨在通过提供一组基于模型的方法来创建表单,使得与模型一起工作比仅使用标准HTML元素更容易。该助手生成表单的HTML,为每种类型的输入(例如文本、密码、选择等)提供一个方法。当提交表单(即用户点击提交按钮或通过JavaScript调用form.submit)时,表单输入将被捆绑到params对象中并传递回控制器。
您可以在Action View Form Helpers Guide中了解更多关于表单助手的信息。
1.9 JavaScriptHelper
提供在视图中使用JavaScript的功能。
1.9.1 escape_javascript
为JavaScript段落转义回车符和单引号和双引号。
1.9.2 javascript_tag
返回包装提供的代码的JavaScript标签。
javascript_tag "alert('一切都很好')"
<script>
//<![CDATA[
alert('一切都很好')
//]]>
</script>
1.10 NumberHelper
提供将数字转换为格式化字符串的方法。提供了电话号码、货币、百分比、精度、位置表示法和文件大小的方法。
1.10.1 number_to_currency
将数字格式化为货币字符串(例如$13.65)。
number_to_currency(1234567890.50) # => $1,234,567,890.50
1.10.2 number_to_human
将数字格式化为更易读的形式,以便用户更容易阅读;对于可能非常大的数字很有用。
number_to_human(1234) # => 1.23 Thousand
number_to_human(1234567) # => 1.23 Million
1.10.3 number_to_human_size
将字节大小格式化为更易理解的表示形式;对于向用户报告文件大小很有用。
number_to_human_size(1234) # => 1.21 KB
number_to_human_size(1234567) # => 1.18 MB
1.10.4 number_to_percentage
将数字格式化为百分比字符串。
ruby
number_to_percentage(100, precision: 0) # => 100%
1.10.5 number_to_phone
将数字格式化为电话号码(默认为美国)。
number_to_phone(1235551234) # => 123-555-1234
1.10.6 number_with_delimiter
使用分隔符对数字进行分组,以千为单位。
number_with_delimiter(12345678) # => 12,345,678
1.10.7 number_with_precision
使用指定的precision
级别格式化数字,默认为3。
number_with_precision(111.2345) # => 111.235
number_with_precision(111.2345, precision: 2) # => 111.23
1.11 SanitizeHelper
SanitizeHelper模块提供了一组方法,用于清除文本中不需要的HTML元素。
1.11.1 sanitize
此sanitize助手将对所有标签进行HTML编码,并删除除特定允许的属性之外的所有属性。
sanitize @article.body
如果传递了:attributes
或:tags
选项,则只允许提到的属性和标签,其他内容将被删除。
sanitize @article.body, tags: %w(table tr td), attributes: %w(id class style)
要更改多个用途的默认值,例如将table标签添加到默认值中:
class Application < Rails::Application
config.action_view.sanitized_allowed_tags = 'table', 'tr', 'td'
end
1.11.2 sanitize_css(style)
清除CSS代码块。
1.11.3 strip_links(html)
从文本中删除所有链接标签,只保留链接文本。
strip_links('<a href="https://rubyonrails.org">Ruby on Rails</a>')
# => Ruby on Rails
strip_links('emails to <a href="mailto:[email protected]">[email protected]</a>.')
# => emails to [email protected].
strip_links('Blog: <a href="http://myblog.com/">Visit</a>.')
# => Blog: Visit.
1.11.4 strip_tags(html)
从html中删除所有HTML标签,包括注释。 此功能由rails-html-sanitizer gem提供支持。
strip_tags("Strip <i>these</i> tags!")
# => Strip these tags!
strip_tags("<b>Bold</b> no more! <a href='more.html'>See more</a>")
# => Bold no more! See more
注意:输出可能仍然包含未转义的'<','>'和'&'字符,并可能使浏览器混淆。
1.12 UrlHelper
提供了一些方法来创建链接和获取依赖于路由子系统的URL。
1.12.1 url_for
返回提供的options
集合的URL。
1.12.1.1 示例
url_for @profile
# => /profiles/1
url_for [ @hotel, @booking, page: 2, line: 3 ]
# => /hotels/1/bookings/1?line=3&page=2
1.12.2 link_to
在底层使用url_for
派生出一个URL。主要用于创建RESTful资源链接,对于此示例,可以将模型传递给link_to
。
示例
link_to "Profile", @profile
# => <a href="/profiles/1">Profile</a>
如果链接目标无法适应名称参数,则也可以使用块。 ERB示例:
<%= link_to @profile do %>
<strong><%= @profile.name %></strong> -- <span>Check it out!</span>
<% end %>
将输出:
<a href="/profiles/1">
<strong>David</strong> -- <span>Check it out!</span>
</a>
有关更多信息,请参见API文档
1.12.3 button_to
生成一个提交到传递的URL的表单。该表单具有一个值为name
的提交按钮。
1.12.3.1 示例
<%= button_to "Sign in", sign_in_path %>
大致输出如下:
<form method="post" action="/sessions" class="button_to">
<input type="submit" value="Sign in" />
</form>
有关更多信息,请参见API文档
1.13 CsrfHelper
返回带有跨站请求伪造保护参数和令牌的元标签"csrf-param"和"csrf-token"的名称。
<%= csrf_meta_tags %>
注意:常规表单生成隐藏字段,因此不使用这些标签。有关详细信息,请参见Rails安全指南。
反馈
欢迎您帮助改进本指南的质量。
如果您发现任何拼写错误或事实错误,请贡献您的意见。 要开始,请阅读我们的 文档贡献 部分。
您还可能会发现不完整的内容或过时的内容。 请为主要内容添加任何缺失的文档。请先检查 Edge 指南,以验证问题是否已经修复或尚未修复。 请参阅 Ruby on Rails 指南准则 以了解样式和规范。
如果您发现需要修复但无法自行修复的问题,请 提交问题。
最后但同样重要的是,欢迎您在 官方 Ruby on Rails 论坛 上讨论有关 Ruby on Rails 文档的任何问题。