Rails:form_for如何接受局部变量?

时间:2017-02-28 18:31:45

标签: ruby-on-rails

Rails 5生成器生成的代码:

<%= form_for(post) do |f| %>
  <% if post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:</h2>

      <ul>
      <% post.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %>
    <%= f.text_field :title %>
  </div>

  <div class="field">
    <%= f.label :body %>
    <%= f.text_area :body %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我很困惑为什么第一行form_for(post)有效。因为在这种情况下,所讨论的帖子存储在实例变量@post中。我想知道什么机制允许裸post工作。我原以为这是一个未定义的(或null)局部变量。

1 个答案:

答案 0 :(得分:0)

1)它在模板上面的某处定义。

2)此视图为partial,父视图正在注入变量。

3)Controller将变量注入模板。

您可以通过添加binding.pry断点并检查post变量的值来调试它。