有关Michael Hartl教程的更详细说明

时间:2015-01-30 11:04:14

标签: html ruby-on-rails

在Michael Hartl的教程中,它是写的

<%= f.label :name %>
<%= f.text_field :name %>

它变成了

<label for="user_name">Name</label>
<input id="user_name" name="user[name]" type="text" />

<%= f.label :email %>
<%= f.email_field :email %>

变为

<label for="user_email">Email</label>
<input id="user_email" name="user[email]" type="email" />

看了很久但我真的无法理解代码如何转换为HTML。谁能解释一下?

这些都包含在以下代码中

<%= form_for(@user) do |f| %>
 .
 .
 .
<% end %>

1 个答案:

答案 0 :(得分:0)

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

这些方法是表单助手,并包含在FormHelper的表单对象中。

如果查看the label method中的代码,您会看到它实例化Tags::Label对象。

更深入地了解Tags::Label它做了很多,但最重要的部分是对label_tag的调用。这会呈现标签。

使用humanize帮助程序将标签标记的内容从:email更改为Email。 (我们现在忽略所有的本地化和翻译)。您可以自己随处使用这些助手。使用rails console打开控制台:

:email.to_s.humanize #=> "Email"
:postal_code.to_s.humanize #=> "Postal code"

在rails中,大多数这些堆栈很难遵循,因为它被抽象为模型(允许重复使用)和许多边缘情况,如本地化或XSS安全混合在很多额外的“cruft”这使得代码遵循的路径更难以理解。

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