所以我有两个这样的课程。
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?
答案 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应用程序,不依赖于继承和不需要的结构。除非您在部署应用程序后动态添加页面,否则我还会更明确地定义路由。
不要使用全局变量。我实际上不记得上次看到一个使用过的时候,还有很多更好的选择。如果你发现你需要一个,那就是你走错了道路的线索。