2012-08-31 2 views
1

나는 점점 더 sinatra를 사용하는 프런트 엔드 녀석입니다. 현재 앱을 만들고 있는데 myapp.rb 파일의 경로를 지우는 우아한 방법을 찾고 있습니다. 나는 이런 식으로 뭔가가 그들을 결합 할 수있는 알고, 템플릿에 관하여Sinatra의 레이아웃에 대한 경로를 매핑하여 청소를 도와주세요.

get '/' do 
    haml :content 
end 

get '/content' do 
    haml :content, :layout => :empty 
end 

get '/show_layout' do 
    haml :show_layout 
end 

get '/conversion' do 
    haml :conversion, :layout => :empty 
end 

get '/optout' do 
    haml :optout, :layout => false 
end 

get '/terms' do 
    haml :terms, :layout => :empty 
end 

:

현재 나는이 노선을

get '/:name' do 
    haml params[:name].to_sym 
end 

그러나 레이아웃에 대한

? layout.haml과 empty.haml (: layout, : empty), 3면 계산하면 다음과 같습니다. layout => false

해시를 사용하면 가장 좋은 방법일까요? 다음과 같이 입력하십시오 :

layout_map = { 
    "" => "", 
    :content => "", 
    :show_layout => "", 
    :conversion => :empty, 
    :optout => false, 
    :terms => :empty  
} 

get '/:name' do 
    haml params[:name].to_sym, :layout => layout_map[:name] 
end 

제대로 작동하는 것처럼 보이지만 정상적으로 작동하지 않습니다.

도움 주셔서 감사합니다.

+1

왜 이것을 다운 시키셨습니까? 그것은 나에게 좋은 질문처럼 보입니다 ... –

+0

감사합니다 @DhaivatPandya – satyrsynth

+0

'layout_map [: name]'을'layout_map [params [: name] .to_sym]'으로 바꾸려고합니다. – apneadiving

답변

0

모두에게 도움을 주셔서 감사합니다. 애플 리케이션의 다른 요구 사항으로 인해 내 솔루션으로 끝났다.

get "/:base_route/" do 
    haml :"#{params[:base_route]}/content", :layout => :"#{params[:base_route]}/layout" 
end 

get "/:base_route/:name" do 
    layout_map = { 
    :landing => :layout, 
    :content => :empty, 
    :show_layout => :layout, 
    :conversion => :empty, 
    :terms => :empty  
    }   
    haml :"#{params[:base_route]}/#{params[:name]}", :layout => :"#{params[:base_route]}/#{layout_map[params[:name].to_sym]}" 
end 
2

당신은 당신을 사용할 수 있습니다

get '/:name' do 
    haml params[:name].to_sym 
end 

플러스 레이아웃을 설정합니다 경로 이전 :

before '/:name' do 
    layout_map = { 
    :content => "", 
    :show_layout => "", 
    :conversion => :empty, 
    :optout => false, 
    :terms => :empty  
    } 
    set :layout => layout_map[params[:name]] 
end 

이 모든 호출을 params[:name]에 따라 레이아웃을 설정합니다. 그러나 모든 경로를 지정하여 .sim을 조심하십시오. 누군가가 많은 404를 호출하면 가비지 수집되지 않고 결국 앱을 다운시킬 수있는 많은 심볼을 생성하게됩니다. 더 나은이 작업을 수행 : 그 이름의 파일이있는 경우

get '/:name' do 
    halt 404 unless File.exist?("views/#{params[:name]}.haml") 
    time = File.stat("views/#{params[:name]}.haml").ctime 
    last_modified(time) 
    haml params[:name].intern 
end 

에만 params[:name]의 상징을 만들 것입니다. 심볼이 이미 있기 때문에 당신은 안전한쪽에 있습니다.