代码之家  ›  专栏  ›  技术社区  ›  Olivier Tremblay

西纳特拉放法不起作用?

  •  4
  • Olivier Tremblay  · 技术社区  · 15 年前

    由于某些原因,我的“PUT”方法没有被Sinatra用这个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 回复  |  直到 15 年前
        1
  •  10
  •   AboutRuby    15 年前

    看起来都对。看起来您要么将路由字符串写错了,要么在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
    
        2
  •  15
  •   februaryInk    9 年前

    一定要包括 Rack::MethodOverride 在你的配置.ru:

    use Rack::MethodOverride
    
        3
  •  0
  •   Steffen Roller Irukandji    11 年前

    我只是碰到了这个,上面的提示都没用。我发现:

    表单定义必须首先使用action=,然后使用method=

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

    推荐文章