【发布时间】:2012-08-08 15:58:10
【问题描述】:
Rails 会生成一个部分表单,它既可以用于由 get 操作呈现的页面,也可以用于由新操作呈现的页面。如果是前者,则表单的方法设置为 PUT,如果是后者,则表单的操作设置为 POST。
rails 如何决定使用哪种方法?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 forms rest form-helpers
Rails 会生成一个部分表单,它既可以用于由 get 操作呈现的页面,也可以用于由新操作呈现的页面。如果是前者,则表单的方法设置为 PUT,如果是后者,则表单的操作设置为 POST。
rails 如何决定使用哪种方法?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 forms rest form-helpers
如果传递给表单的对象是persisted?,则表单构建器知道您正在更新对象,因此将呈现PUT 操作。如果它没有被持久化,那么它知道你正在创建一个新对象,它将使用POST。
<%= form_for @user do |f| %>
<%= f.button %>
<% end %>
如果@user是新记录,则使用POST,按钮标签变为Create User,否则使用PUT,标签变为Update User。没有更多的了。
【讨论】:
_method,其值为 patch,用于更新操作。 <form action="/books/1" accept-charset="UTF-8" method="post"> <input type="hidden" name="_method" value="patch">
编辑现有资源的表单使用PUT,创建新资源的表单使用POST。根据here 描述的 REST 标准。
来自 rails form_for 帮助代码:
action, method = object.respond_to?(:persisted?) && object.persisted? ? [:edit, :put] : [:new, :post]
并且 ActiveRecord 的 persisted? 声明为:
!(new_record? || destroyed?)
【讨论】: