【问题标题】:How does rails decide to render a form with a method of PUT or POST?rails 如何决定使用 PUT 或 POST 方法呈现表单?
【发布时间】:2012-08-08 15:58:10
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 forms rest form-helpers


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。我最终使用了 created_at,因为我正在使用客户端 js 访问我的模型,@model 被 gon 公开为哈希。所以我只剩下可以使用的属性了。
    • 在 Rails 6 中,有一个隐藏的输入 _method,其值为 patch,用于更新操作。 &lt;form action="/books/1" accept-charset="UTF-8" method="post"&gt; &lt;input type="hidden" name="_method" value="patch"&gt;
    【解决方案2】:

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

    来自 rails form_for 帮助代码:

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

    并且 ActiveRecord 的 persisted? 声明为:

    !(new_record? || destroyed?)
    

    【讨论】:

    • 我的问题是 Rails 如何决定在表单上设置哪种方法。它用什么来决定?
    • 更新了,是你想要的吗?
    • 谢谢。不过,怕@hgmnz 打败你。
    猜你喜欢
    • 2018-10-20
    • 2017-02-17
    • 2021-03-05
    • 2015-06-03
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多