如何使用Rails助手

Baklib
Baklib 最后一次编辑 4 年多前
425
Rails中的帮助者是什么?
助手就是一个方法是(大部分)在Rails视图中使用共享的可重用代码。Rails附带了一组内置的辅助方法。
这些内置帮助器之一是time_ago_in_words
这是一个例子:
  1. time_ago_in_words (时间。现在)
  2. # “少于一分钟”
  3. time_ago_in_words (时间。现在+ 60 )
  4. # “1分钟”
  5. time_ago_in_words (时间。现在+ 600 )
  6. # “10分钟”
每当您要以这种特定格式显示时间时,此方法都会很有用。
另一个Rails视图助手是number_to_human
范例:
  1. number_to_human (10_000 )
  2. #“一万”
当您想取一个数字并像阅读时一样打印时,这非常好,这使它看起来更人性化。
您可以在Ruby on Rails文档中找到更多帮助器。
但是您知道您可以编写自己的吗?
获取我的终极Ruby秘籍表: 这个方便的7页PDF帮助您快速找到所需的Ruby语法,正在寻找的Ruby方法或您不太记得其名称的内置类。

编写自己的助手方法

如果您要编写自定义帮助程序方法,则正确的目录路径为app/helpers
您可以在助手模块中编写助手。
默认情况下,每个Rails应用程序都带有一个基本的帮助程序模块,称为 ApplicationHelper
您可以在此处添加帮助方法。
这些方法将自动提供给所有视图。稍后,您将学习如何在控制器中使用它们以及为什么这可能不是一个好主意。
您可以在中编写所有助手ApplicationHelper
但是还有另一种选择……
您可以创建帮助程序模块,以便更好地组织方法。
说明:
  1. 在下面创建一个新文件 app/helpers
  2. 像这样命名 user_helper.rb
  3. 添加一个与文件名匹配的新模块
范例:
  1. #app / helpers / user_helper.rb
  2. 模块UserHelper
  3. def format_name (用户)
  4. 如果用户。性别== “ M”
  5. “先生#{user.name}”
  6. 其他
  7. “女士#{user.name}”
  8. 结束
  9. 结束
  10. 结束
该代码可用于根据其性别以正式方式向某人讲话。
主要的好处?
在需要时以及在需要更改代码时,您不必在其他视图中重复此逻辑……只需在一个位置进行更改。
非常好!

使用新的助手模块

您可以在视图中使用辅助方法。
像这样:
  1. < %= format_name(@user)%>
容易吧?
如果要在视图之外使用帮助器,则需要其他功能。

如何从控制器使用助手

尽管不是很常见,但有可能使用控制器动作中的辅助方法。
在Rails 5之前,您必须包括帮助程序模块。
在较新的版本中,可以在控制器中将助手与helpers(多个)对象一起使用。
像这样:
  1. 类UsersController
  2. 定义指数
  3. 帮手。time_ago_in_words (时间。现在)
  4. 结束
  5. 结束
这样,您可以使用控制器中的助手。但是在执行此操作之前请三思,因为这可能是设计问题。
考虑改用普通的Ruby对象

Rails控制台的乐趣

我喜欢使用Rails控制台(加载了Rails应用程序的irb)尝试方法并玩转各种东西。
包括佣工!
您可以从控制台使用帮助程序helper.method_name
注意“ helper”的单数形式,因此您不会收到错误消息。请记住,控制台不会自动重新加载代码更改。

编写Rails View Helpers的最佳实践

什么时候应该创建一个辅助方法?
只要您有生成HTML的逻辑。
通常,这属于两类之一,一类是字符串格式,另一类是条件页面元素。
另一个提示
如果您想编写好帮手,则不要使用任何实例变量,它们可能在当前视图中可用,但可能不在其他视图中。
由于缺少变量,将导致错误。
解决方案?
使用参数,因此您的方法需要的任何数据都是清晰明了的。
  1. # 错误道
  2. def eat_healthy
  3. @水果。吃
  4. 结束
  5. #改为这样做
  6. def eat_healthy (水果)
  7. 水果。吃
  8. 结束
我的最后一个技巧是将您的助手分成多个模块,其中每个模块名称都清楚地描述了该模块包含的方法。
但是:
这对重复的方法名无济于事,这可能导致错误和混乱。
您所有的助手都应该有唯一的名字。
或者,请尝试使用演示者对象,如本指南中所述