我目前正在将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方法?
答案 0 :(得分:3)
我发现了问题。我正在查找在错误/过时的手册中设置HTTP方法的语法。它应该是&lt;%= form_for @order,:as =&gt; :order,:url =&gt; orders_path,:html =&gt; {:multipart =&gt;是的,:method =&gt; :post} do | f | - %GT;