8

Rails 会生成一个表单部分,它既可以用于由 get 操作呈现的页面,也可以用于由新操作呈现的页面。如果是前者,则表单的方法设置为 PUT,如果是后者,则表单的操作设置为 POST。

rails 如何决定使用哪种方法?

4

2 回答 2

13

如果传递给表单的对象是persisted?,则表单构建器知道您正在更新一个对象,因此将呈现一个PUT动作。如果它没有被持久化,那么它知道你正在创建一个新对象并且它将使用POST.

<%= form_for @user do |f| %>
  <%= f.button %>
<% end %>

如果@user是新记录,POST则使用且按钮标签变为Create User,否则PUT使用且标签变为Update User。没有更多的了。

于 2012-08-08T16:10:07.960 回答
3

表单编辑使用现有资源PUT,表单创建新资源使用POST。根据此处描述的 REST 标准。

从 railsform_for帮助代码:

action, method = object.respond_to?(:persisted?) && object.persisted? ? [:edit, :put] : [:new, :post]

并且persisted?对于 ActiveRecord 被声明为:

!(new_record? || destroyed?)
于 2012-08-08T16:07:46.540 回答