Sinatra PUT метод не работает? - PullRequest
4 голосов
/ 23 августа 2010

По какой-то причине мой метод "PUT" не был пойман Синатрой с помощью этого html. Может ли кто-нибудь помочь мне определить ошибку? Когда я использую действие «post» в моем контроллере, оно работает так, как ожидается ...

<form method="post" action="/proposals/<%=@proposal.id%>/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>

Ответы [ 3 ]

14 голосов
/ 06 апреля 2011

Обязательно включите Rack::MethodOverride в свой config.ru:

use Rack::MethodOverride
10 голосов
/ 23 августа 2010

Это все выглядит правильно. Похоже, вы либо неправильно написали строку маршрута, либо она перехватывается другим маршрутом перед вашим методом 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
0 голосов
/ 06 октября 2013

Я просто столкнулся с этим, и ни один из советов выше не помог.То, что я нашел:

Определение формы должно прийти сначала с действием =, а затем с методом =

правильная форма:

<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>

Первый работал у меня, второй - нет.Может быть, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...