2010-08-23 85 views
4

出於某種原因,我的「PUT」方法沒有被Sinatra使用這個html捕獲。有人能幫我發現錯誤嗎?當我在我的控制器中使用「發佈」操作時,它的工作方式與預期相同...Sinatra PUT方法不起作用?

<form method="post" action="/proposals/<%[email protected]%>/addItem"> 
<input type="hidden" name="_method" value="put"/> 
    <div> 
    <label for="item_id">Item list</label> 
<select title="Item ID" id="item_id" name='item_id'> 
    <%@items.each do |item|%> 
    <option value="<%=item.id%>"><%=item.name%></option> 
    <%end%> 
</select>         
<input type="submit" value="Add"/></div> 
<label for="new_item_name">Create new item</label> 
<input type="text" id="new_item_name" name="new_item_name" /> 
<input type="submit" value="Create"/> 
</form> 
+0

method =「post」? – rogerdpack 2010-08-23 16:35:32

+0

根據Sinatra書的要求。 – 2010-08-23 19:27:15

回答

9

這一切看起來都正確。看起來你要麼寫錯了路由字符串,要麼在put方法之前被其他路由所捕獲。我對此很好奇,所以我寫了一個使用put方法的快速Sinatra應用程序,它確實以這種方式工作。

#!/usr/bin/env ruby 
require 'rubygems' 
require 'sinatra' 

get '/' do 
    <<-eos 
<html> 
    <body> 
    <form action="/putsomething" method="post"> 
     <input type="hidden" name="_method" value="put" /> 
     <input type="submit"> 
    </form> 
    </body> 
</html> 
eos 
end 

put '/putsomething' do 
    "You put something!" 
end 
12

一定要包括Rack::MethodOverride在config.ru:

use Rack::MethodOverride 
0

我正好碰上這一點,並沒有任何提示的上述幫助。我發現:

形式定義必須拿出先用行動=和第二與方法=

正確的形式:

<form action="/putsomething" method="POST"> 
    <input type="hidden" name="_method" value="PUT" /> 
... 
</form> 

錯誤的形式:

<form method="POST" action="/putsomething"> 
    <input type="hidden" name="_method" value="PUT" /> 
... 
</form> 

的第一次爲我工作,第二次沒有。 也許這有幫助。