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)局部变量。
答案 0 :(得分:0)
1)它在模板上面的某处定义。
2)此视图为partial
,父视图正在注入变量。
3)Controller将变量注入模板。
您可以通过添加binding.pry
断点并检查post
变量的值来调试它。