【问题标题】:Sinatra routes not working in modular app?Sinatra 路由在模块化应用程序中不起作用?
【发布时间】:2014-05-23 05:30:46
【问题描述】:

我已将经典的 Sinatra 应用程序转换为模块化应用程序。现在突然我的putpatchdelete 路线停止工作。 getpost 工作正常。我需要做些什么才能让这些在不同于经典的模块化应用程序中工作?

%form{action: "/addsomething", method: 'post'}
  %input{type: 'hidden', name: '_method', value: 'put'}  

当我尝试访问上述路线之一时,我现在收到 404。

require 'sinatra/base'

class MyClass < Sinatra::Base
    put '/addsomething' do
     'HELLO WORLD!'
    end

    get '/hello' do
      'hello world'
    end
 end

【问题讨论】:

  • 您需要向我们展示您的代码示例,以便我们了解您是如何定义您的类和处理程序的。请记住,一张图片胜过一千个单词,在这种情况下,图片就是代码。
  • 请看原帖。我和我的班级一起编辑了它。谢谢。
  • 您的引号不匹配——您混淆了单引号和双引号。
  • 对不起,引号是一个粗心的错字,因为我在发帖时是手动输入的。引号是真实的。

标签: ruby sinatra


【解决方案1】:

method_override 设置(允许_method 字段覆盖 HTTP 方法)为false by default in modular style。您需要启用它:

enable :method_override

【讨论】:

  • 不幸的是 method_override 已启用。
  • DOH,我的错。我有:method_overide 而不是:method_override。都修好了。谢谢。
  • @HACKTORIOUS,如果它解决了问题,请考虑投票并接受答案。
【解决方案2】:

您仍然可以以模块化样式从 Sinatra::Application 继承以保持默认设置:

require 'sinatra/base'

class MyClass < Sinatra::Application
    put '/addsomething' do
     'HELLO WORLD!'
    end

    get '/hello' do
      'hello world'
    end
 end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多