在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 %>
答案 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)
。