2

这是我很久以来一直想问的一个问题,但到目前为止,我只是将其视为“Rails 魔法”。正如标题所述,为什么 Rails 表单助手看起来像一个 do 循环?如果您查看官方 Rails 文档,它似乎没有解释这一点,它只是通过给出以下作为基本示例直接跳进去:

<%= form_tag do %>
  Form contents
<% end %>

那么这里到底发生了什么?为什么表单似乎正在创建一个循环,而不是其他语言中没有所述循环的输入表单。

<%= form_for @person, url: {action: "create"} do |person_form| %>
  <%= person_form.text_field :name %>
  <%= fields_for @person.contact_detail do |contact_details_form| %>
    <%= contact_details_form.text_field :phone_number %>
  <% end %>
<% end %>
4

2 回答 2

8

这不是“Rails 魔法”,而是完全普通的 Ruby 语法。do/end表示 Ruby 中的块,而不是循环。

Rails 的文档没有解释这一点,因为 Rails 的文档假定您了解 Ruby。Rails 没有引入任何新的语法(也不能),它只是一个框架,用 100% 纯旧的 Ruby 编写。

于 2014-07-28T18:01:50.837 回答
3

因为它需要一个块参数。

它与循环没有任何关系,例如,File#open也需要一个块。

#open产生打开的文件。form_for助手产生助手。

于 2014-07-28T18:03:19.923 回答