/ / Sinatraルート関数呼び出し&ヘルパー - ルビー、シナトラ

シナトラルート関数呼び出しとヘルパー - ruby​​、sinatra

だから私はこのような2つのクラスがあります。

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ヘルパーをどのように使用できますか?

回答:

回答№1は2

あなたは "複雑すぎることをしました。 ヘルパー ドキュメントのセクション

これをアプリケーションコントローラに入れます。

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アプリ全体ではなく「それだ」継承とリソースへの依存は必須ではありません。アプリのデプロイ後に動的にページを追加しない限り、ルートをより明確に定義することもできます。

グローバルを使用しないでください。実際に使用したのを最後に見たときのことを思い出すことはできません。もっと良い方法がたくさんあります。あなたがあなたがそれを必要とすると思うならば、それは「あなたが手掛かりである」間違った道を進んでいます。