form_for和form_tag对象之间的区别是什么?

时间:2014-03-22 21:41:42

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

正如问题所说......差异是什么?应该何时使用?

我在这里使用表单,但是可以替换使用form_tag吗?:

<%= form_for [@event,@comment] do |f| %> 
<% if @comment.errors.any? %>
<div class="error_messages">
  <h3>Please correct the following errors.</h3>
  <ul>
    <% @comment.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
    <% end %>
  </ul>
</div>
<% end %>
<div class="field">
  <%= f.text_field :body, rows: 10, placeholder: "Leave a comment" %>
</div>

<div class="actions">
  <%= f.submit "Post comment", class: "btn" %>
</div>
<% end %>

干杯!

1 个答案:

答案 0 :(得分:1)

form_for是正确的选择。

来自http://guides.rubyonrails.org/form_helpers.html

“form_tag助手接受2个参数:操作的路径和选项哈希。”

请注意,您无法将模型实例传递给[@event,@comment]

,就像您使用form_for一样

form_tag基本上只是一种方便的方法,你可以用它来保存自己写简单的HTML。

另一方面,

form_for接受一个模型实例作为参数,并在此基础上提供额外的帮助 - 参数f被传递到块中你给它。 f是一个表单对象,它知道您传递给form_for的模型,并且可以更轻松地编写表单的其余部分。

稍后在表单中了解如何使用<%= f.text_field :body, rows: 10, placeholder: "Leave a comment" %>?您无法使用form_tag执行此操作,因为表单对象f将无法使用。