簡體   English   中英

關於Michael Hartl教程的更詳細說明

[英]More Detailed Explanation on Michael Hartl's Tutorial

在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 %>

label <%= f.label :email %>實際上只是一個方法調用:您調用form.label(:email) <%=<% print縮寫。

這些方法是表單幫助器,包含在FormHelper的表單對象中。

如果您查看label方法中的代碼,您將看到它實例化了一個Tags::Label對象。

更深入地了解Tags::Label可以label_tag很多作用,但是最重要的部分是對label_tag的調用。 呈現標簽標簽。

通過使用humanize助手,標簽標記的內容從:email更改為Email (我們暫時忽略所有本地化和翻譯)。 您可以在任何地方使用這些幫助器。 rails console打開一個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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM