Sinatra路线功能呼叫&助手

时间:2018-03-09 09:00:50

标签: ruby sinatra

所以我有两个这样的课程。

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 halt helper?

1 个答案:

答案 0 :(得分:2)

你的事情过于复杂。请参阅文档的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应用程序,不依赖于继承和不需要的结构。除非您在部署应用程序后动态添加页面,否则我还会更明确地定义路由。

不要使用全局变量。我实际上不记得上次看到一个使用过的时候,还有很多更好的选择。如果你发现你需要一个,那就是你走错了道路的线索。

相关问题