在Michael的教程中,它被写成
<%= 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 %>发布于 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打开控制台
: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)。
https://stackoverflow.com/questions/28234499
复制相似问题