让我对学习Rails感到不舒服的第一件事就是看一下视图。 我发现了一些带有奇怪语法的奇怪文件。 他们的名字就像“ name.html.erb”,我就像是什么? 为什么这个似乎是具有HTML语法的HTML文件的文件在.html扩展名之后具有.erb扩展名?

在那时,那些有点像HTML标签的怪异符号对我来说还是个谜。 因此,我开始调查,结果是:

什么是erb?

“ erb”是指嵌入式Ruby,它是一个模板引擎,其中Ruby语言嵌入到HTML中。 更清楚地说:引擎是否需要能够在HTML代码中使用Ruby语言及其所有功能。 我们将在下一部分中看到其应用。

Rails使用erb作为其默认引擎来渲染视图。 它使用称为erubi的特定实现。

要在Rails中使用erb,文件都应具有.html.erb扩展名,以使Rails能够在其资产管道中对其进行处理。

它是如何工作的?

在调查过程中,我发现使用了三个元素:

表达式标签<%=%>

此标记表明其中将有一个表达式。 要点:应用程序将在此标记内呈现执行代码的结果。 让我们看一个例子,使其更清楚:

我假设您已经了解Rails中的MVC架构,但是如果您不了解,请不要担心。 我将尽力解释清楚:

假设我们有一个具有以下属性的用户模型:

控制器将要求模型从数据库中检索第一个用户。 然后将其存储在名为@user的实例变量中:

如果我们想在视图中显示前三个用户属性,我们将使用HTML和erb代码,如下所示:

< h1 > First User Information </ h1 >
< ol >< li > User id: < %= @ user.id %> </ li >< li > User name: < %= @ user.name %> </ li >< li > User email: < %= @ user.email %> </ li >
</ ol >

浏览器将显示如下结果:

切记:该应用程序将在表达式标签内呈现执行代码的结果。 例如,<%= 2 + 2%>将呈现4。

执行标签<%%>

像表达式标签一样,它们将Ruby代码嵌入HTML。 区别在于应用程序不会呈现执行代码的结果。 他们经常使用红宝石表情。 让我们回顾一个示例以更好地理解它:

假设您正在构建一个视图以显示数据库中的所有用户。 控制器将要求模型从数据库中检索所有用户(共10个)。 然后将它们存储在名为@users的实例变量中。 您有两种方法可以做到这一点:有效的方法和低效率的方法。 让我们从后面开始:

一种显示用户列表的效率非常低下的方法是建立一个如下所示的视图:

< h1 > All Users </ h1 >
< ol >< li > < %= @ users [ 0 ] .name %> </ li >< li > < %= @ users [ 1 ] .name %> </ li >< li > < %= @ users [ 2 ] .name %> </ li >< li > < %= @ users [ 3 ] .name %> </ li >< li > < %= @ users [ 4 ] .name %> </ li >< li > < %= @ users [ 5 ] .name %> </ li >< li > < %= @ users [ 6 ] .name %> </ li >< li > < %= @ users [ 7 ] .name %> </ li >< li > < %= @ users [ 8 ] .name %> </ li >< li > < %= @ users [ 9 ] .name %> </ li >
</ ol >

该视图将呈现:

想象一下,这里没有10个用户,但有数千个。 这就是循环变得有用的时候,我们可以在执行标签和表达式标签的帮助下使用它,如下所示:

< h1 > All Users </ h1 >
< ol >< % @ users.each do | user | %>< li > < %= user.name + ' efficiently displayed ' %> </ li >< % end %>
</ ol >

注意三个要点:

  1. 我们使用“每个”循环来遍历用户。 这样,我们的代码将不再取决于数据库中有多少用户。
  2. 我们使用执行标签(<%%>)来包装块结构。 那就是应用程序不会显示的Ruby代码。
  3. 我们使用表达式标签(<%=%>)包装应用程序将显示的代码块。 在这种情况下,每个用户名+文本都会“有效显示”。

您可以在下面查看实施结果:

注释标签<%#%>

用于在代码中放置Ruby注释。 例如:

< h1 > All Users </ h1 >
< ol >< %# loop through every user %>< % @ users.each do | user | %>< li > < %= user.name + ' efficiently displayed ' %> </ li >< % end %>
</ ol >

构建模板时,注释标记内的代码将被忽略。

如何掌握呢?

让我告诉你一些很棒的事情:如果您已经对Ruby和HTML有所了解,那么精通erb只需几分钟。 否则,您需要花几个小时才能练习。

如果您打算成为一名专业的Rails开发人员,则将练习很多此技能,所以请不要担心。 您迟早会掌握它。

始终有效的建议是:进行大量练习和实验,这是掌握工具的唯一方法。

重要提示:避免在视图中使用逻辑繁重的erb代码。 对于这些情况,最好创建一个辅助方法来处理该问题。

如果您想了解更多关于erb的信息,也可以访问以下站点:

  • 参考文献1 。
  • 参考2 。

请在Twitter上关注我,并在LinkedIn 上连接。

From: https://hackernoon.com/you-need-to-know-what-is-erb-in-rails-and-how-to-master-it-oj303yxq

您需要知道Rails中的erb以及如何掌握它相关推荐

  1. 在Rails中撤消脚手架

    有没有办法在Rails中"撤消"脚手架命令的效果? #1楼 第一次,如果您已生成脚手架,则可以检查数据库迁移. 你必须销毁它们来清理你的数据库 rake db:rollback 然 ...

  2. rails中对应关系

    2019独角兽企业重金招聘Python工程师标准>>> 1,建立文章对应的评论表,一对多的关系 rails generate model Comment comment:string ...

  3. Rails中的使用者验证:Devise

    Rails中的使用者验证:Devise 概要:Devise是Ruby On Rails的一个三方权限认证组件,通过它可以无需编码快速生成一个带有登陆,注册.权限认证和重置密码的认证模块. 安装: 1. ...

  4. rails中weill_paginate的paginate方法中不能使用额外参数的解决办法

    我们知道高版本中的rails中的分页功能已经放在will_paginate这个gem中,我们在控制器方法中往往需要调用其paginate方法来实现分页数据集控制,举个例子:正常的情况我们想要每页显示1 ...

  5. rails db 查询优化_如何优化查询以解决Rails中常见的可伸缩性瓶颈

    rails db 查询优化 by Usama Ashraf 通过Usama Ashraf 如何优化查询以解决Rails中常见的可伸缩性瓶颈 (How to optimize your queries ...

  6. 在Ruby on Rails中对nil v。空v。空白的简要解释

    我发现自己一再寻找nil?差异的明确定义nil? , blank? , empty? 在Ruby on Rails中. 这是我最接近的: blank? 对象是false,空或空白字符串. 例如, &q ...

  7. rails 中的pluck 方法

    rails 中的pluck 方法 pluck vs. map Transaction.all.map(&:user_id)# 通过pluck的方法(rails 3.2.1以上版本可用)只需要选 ...

  8. Rails 中 scope

    Rails 中自由地使用命名 scope # 可以链式调用 class User < ActiveRecord::Basescope :old, -> { where('age > ...

  9. rails 中的respond_to 对不同的文件要求给予相应

    通过上一讲,我们已经对REST on Rails的基本框架有所了解,但是它是如何实现根据客户端的请求类型来返回不同类型的资源表示的呢?这就是我们这一讲所要讲的,秘密就在于respond_to. 首先让 ...

  10. Rails中嵌套表单的解决

    什么是嵌套表单呢?举个简单的例子吧,比如你有两个表,一个User表,另一个Account表,他们是一对一的关系(也可以一对多等).现在需要提交一个表单的时候同时提交User,Account对应的字段数 ...

最新文章

  1. Win8下在Vmware11中安装使用苹果系统OS X 10.10
  2. 移植.NET Core计划,整合各平台变得更简单了!
  3. 零百1.8秒的电动车竟然是威马... | 云逛成都车展
  4. python3 表情符号编码
  5. Linux之ssh无密码登录
  6. Linux下5种动态库运行时搜索路径的方法
  7. 2019最烂密码榜单出炉,教你设置神级密码!
  8. EPUB PDF DOCX格式转换及主流格式电子书制作终极攻略(内含用WORD制作精美EPUB方法)...
  9. Java快递物流运输管理系统源码
  10. OpenCV中集成目标跟踪算法介绍
  11. 51单片机 1-LED灯流水灯 练习3-流水灯(_crol_位移)
  12. 最大公约数与最小公倍数
  13. 判断闰年的3种方法(判断+范围输出)
  14. 【非常重要】运行supervisorctl错误提示【FATAL或BACKOFF 】Exited too quickly (process log may have details)问题总结
  15. iframe之嵌套方案总结
  16. 网易云音乐常用API浅析
  17. 华为服务器如何登录修改密码,服务器登录修改密码
  18. 游戏计算机的显示器,玩游戏用多大显示器好?聊聊电脑显示器多大尺寸合适
  19. alluxio java_学习 Alluxio(四):Java API
  20. Java设计模式-结构型-门面模式

热门文章

  1. 蚂蚁金融科技:两大发布,实力开放
  2. mac装机必备的电池管理工具:App Tamer Mac版
  3. 如何使用python sklearn 中的LeaveOneGroupOu?特例:leave one pair out的实现多重比较校正?
  4. ios 查看crash日志
  5. 乘积的极限等于极限之积
  6. 【prcc2017实践】win7工具安装python3.7、you-get、QuickTime、ffmpeg、prcc2017
  7. JavaScript-修炼之路第二层
  8. 使用jquery对接高德地图地址四级联动
  9. 【读书笔记】天生不聪明
  10. 中国碳酸钾市场趋势报告、技术动态创新及市场预测