rails如何决定使用PUT或POST方法呈现表单?

Rails生成一个表单部分,可以在get动作呈现的页面和新动作呈现的页面上使用。 如果是前者,则将表单的方法设置为PUT,如果后者将表单的操作设置为POST。

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

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

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

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

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

从rails form_for帮助程序代码:

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

persisted? 对于ActiveRecord,声明为:

 !(new_record? || destroyed?)