首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Michael教程的更详细解释

对Michael教程的更详细解释
EN

Stack Overflow用户
提问于 2015-01-30 11:04:14
回答 1查看 39关注 0票数 0

在Michael的教程中,它被写成

代码语言:javascript
复制
<%= f.label :name %>
<%= f.text_field :name %>

它变成

代码语言:javascript
复制
<label for="user_name">Name</label>
<input id="user_name" name="user[name]" type="text" />

代码语言:javascript
复制
<%= f.label :email %>
<%= f.email_field :email %>

变成了

代码语言:javascript
复制
<label for="user_email">Email</label>
<input id="user_email" name="user[email]" type="email" />

我看了这么久,但我真的不明白代码是如何转换成html的。有人能解释吗?

这些都包含在下面的代码中

代码语言:javascript
复制
<%= form_for(@user) do |f| %>
 .
 .
 .
<% end %>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-30 11:21:37

label<%= f.label :email %>实际上只是一个方法调用:您调用form.label(:email)<%=<% print的缩写。

这些方法是表单帮助程序,并包含在FormHelper的form对象中。

如果您查看标号法中的代码,您将看到它实例化了一个Tags::Label对象。

更深入地看一下Tags::Label,它做了很多事情,但最重要的部分是对label_tag的调用。它呈现标签标签。

标签标记的内容通过使用:email助手从Email更改为humanize。(目前我们忽略了所有的本地化和翻译)。你可以自己随时随地使用这些帮手。用rails console打开控制台

代码语言:javascript
复制
:email.to_s.humanize #=> "Email"
:postal_code.to_s.humanize #=> "Postal code"

在rails中,大多数这样的堆栈很难理解,因为它既被抽象为模型(允许重用),也被抽象成许多边缘情况,比如本地化或XSS安全混合,这使得代码所遵循的路径更难理解。

但是,简而言之,<%= f.label(:email) %>大致可以被翻译成print label_tag(:email.to_s.humanize, id: :email)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28234499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档