2010-08-23 3 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

+0

В соответствии с требованиями книги Синатры. –

ответ

9

Это все выглядит правильно. Похоже, вы либо неправильно написали строку маршрута, либо ее поймали другим путем до вашего метода put. Мне было интересно об этом, поэтому я написал быстрое приложение Sinatra, которое использовало метод put, и он действительно работает таким образом.

#!/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> 

сначала работал на меня, второй - нет. Возможно, это помогает.

Смежные вопросы