我很难让rails使用'button_to'标签和补丁请求vs post。
这是我的标签:
<%= button_to 'Start Game', { :controller => 'provides', :id => @prov_id}, :method => :patch %>
我在我的路线中使用'资源:提供',我在Provide控制器中有一个更新方法。
这是我运行rake路线时提供的输出..
provides GET /provides(.:format) provides#index
POST /provides(.:format) provides#create
new_provide GET /provides/new(.:format) provides#new
edit_provide GET /provides/:id/edit(.:format) provides#edit
provide GET /provides/:id(.:format) provides#show
PATCH /provides/:id(.:format) provides#update
PUT /provides/:id(.:format) provides#update
DELETE /provides/:id(.:format) provides#destroy
所有应正常工作,但我收到以下错误...
Started PATCH "/provides?id=1" for 127.0.0.1 at 2014-03-12 19:20:28 -0500
ActionController::RoutingError (No route matches [PATCH] "/provides"):
这里出了什么问题?这让我感到疯狂,任何帮助都受到高度赞赏。
答案 0 :(得分:3)
您有一条路线:PATCH /provides/:id(.:format)
,但"/provides?id=1"
没有PATCH路线
尝试:
<%= button_to 'Start Game', provide_path(@prov_id), :method => :patch %>
答案 1 :(得分:0)
我很确定您需要为PATCH设置表单标记,因为浏览器当前不会生成非AJAX PATCH请求。
所以将:method => :patch
传递给form_for
,如下所示:
<%= form_for @provides, method: :patch do |f| %>
<%= f.hidden_field :foo, value: 'somevalue' %>
<%= f.submit 'Start Game' %>
<% end %>
这将发送一个方法参数,rails将检测并且您的控制器可以作为真正的PATCH处理。我在示例中包含了为实际补丁传递隐藏参数的能力,因为它不清楚PATCH在您的示例中将提供什么用途。
注意:不要尝试将上面的html嵌入到另一个表单中。 HTML规范不允许嵌套form
标记。