Rails 4:强制方法:: post

时间:2013-09-22 08:23:56

标签: ruby-on-rails forms post patch

我目前正在将Rails 3.2应用程序更新到Rails 4,并且现在使用PATCH作为更新的主要HTTP动词遇到了Rails的问题。我有一个用户可以用来创建订单的表单。此表单使用模型“temporders”。一旦用户发送表单,他将被重定向到/ orders / new,在那里他可以查看并确认第一个表单。订单#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会生成错误'No route matches [PATCH]“/ orders”'我尝试添加“method :: post”但它没有帮助。我怀疑Rails 4假设这是现有订单对象的更新表单,因为我从现有的“temporder”对象获取数据,因此使用PATCH而不是POST。问题是:如何强制使用此方法的POST方法?

1 个答案:

答案 0 :(得分:3)

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