Sinatra 路由函数调用和助手

Sinatra route function call & helpers

所以我有两个这样的类。

class ApplicationController < Sinatra::Base
    # don't enable logging when running tests
    configure :production, :development do
      enable :logging
    end

    get '/*' do
        $request = request
        PageController::render
    end
  end

class PageController < ApplicationController
    def self.render()
        @page = Page.find_by permalink: $request.path_info
        if @page then
        else
            halt 400
        end
    end
end

一切顺利,直到我到达停止语句。未找到方法。我如何在此函数调用中使用 Sinatra 停止助手?

你把事情想得太复杂了。请参阅文档的 Helpers 部分。

将其放入您的应用程序控制器中:

helpers do
  def render
    @page = Page.find_by permalink: request.path_info
    if @page then
    else
      halt 400
    end
  end
end

现在您的路线将是:

get '/*' do
  render
end

不过,你问我太复杂了,没必要模仿Rails。为什么不保持简单?

require 'sinatra'

get '/*' do
  @page = Page.find_by permalink: request.path_info
  if @page then
    haml :something
  else
    halt 400
  end
end

就是这样,这就是整个 Sinatra 应用程序,无需求助于继承和不需要的结构。除非您在部署应用程序后动态添加页面,否则我还会更明确地定义路由。

不要使用全局变量。我实际上不记得上次看到有人使用它是什么时候了,有很多更好的选择。如果您发现自己需要一个,那就表明您走错了路。