4

我目前正在将 Rails 3.2 应用程序更新到 Rails 4,并遇到了 Rails 现在使用 PATCH 作为更新的主要 HTTP 动词的问题。我有一个用户可以用来创建订单的表单。这种形式使用模型“temporders”。用户发送表单后,他将被重定向到 /orders/new,在那里他可以查看并确认第一个表单。Orders#new 使用“@order = Temporder.find session[:temporder]”来获取确认表单的数据。该表单应作为 POST 请求发送到“/orders”。“订单”被声明为一个宁静的资源。

orders_path          GET     /orders(.:format)           orders#index
                     POST    /orders(.:format)           orders#create
new_order_path       GET     /orders/new(.:format)       orders#new
edit_order_path      GET     /orders/:id/edit(.:format)  orders#edit
order_path           GET     /orders/:id(.:format)       orders#show
                     PATCH   /orders/:id(.:format)       orders#update
                     PUT     /orders/:id(.:format)       orders#update
                     DELETE  /orders/:id(.:format)       orders#destroy

<%= form_for @order, :as => :order, :url => orders_path, :html => {:multipart => true} do |f| -%>

但是,当我发送表单时,Rails 会生成错误“没有路由匹配 [PATCH]“/orders””,我尝试添加“method: :post”,但没有帮助。我怀疑 Rails 4 假设这是现有订单对象的更新表单,因为我从现有的“临时订单”对象获取数据,因此使用 PATCH 而不是 POST。问题是:如何强制此表单使用 POST 方法?

4

1 回答 1

4

我发现了问题。我在错误/过时的手册中查找设置 HTTP 方法的语法。它应该是 <%= form_for @order, :as => :order, :url => orders_path, :html => {:multipart => true, :method => :post} do |f| -%>

于 2013-09-23T08:58:39.207 回答