2011-01-25 15 views
11

मेरे पास एक सिनात्रा ऐप सेटअप है जहां अधिकांश तर्क विभिन्न वर्गों के अंदर किया जाता है, और post/get मार्ग उन वर्गों को तुरंत चालू करते हैं और उनकी विधियों को कॉल करते हैं।कक्षा के अंदर रूट हैंडलर

मैं इस बारे में सोच रहा हूं कि post/get कक्षाओं के अंदर रूट हैंडलर स्वयं एक बेहतर संरचना होगी।

किसी भी मामले में, मैं जानना चाहता हूं कि यह संभव है या नहीं। तो उदाहरण के लिए:

class Example 
    def say_hello 
    "Hello" 
    end 

    get '/hello' do 
    @message = say_hello 
    end 
end 

संशोधन के बिना ऊपर करने के लिए, सिनात्रा कहेंगे वहाँ SinatraApplication वस्तु पर कोई विधि say_hello है।

उत्तर

21

तुम बस Sinatra::Base से विरासत की जरूरत है:

require "sinatra/base" 

class Example < Sinatra::Base 
    def say_hello 
    "Hello" 
    end 

    get "/hello" do 
    say_hello 
    end 
end 

आप Example.run! के साथ अपने एप्लिकेशन चला सकते हैं।


यदि आपको अपने आवेदन के कुछ हिस्सों के बीच अधिक अलगाव की आवश्यकता है, तो बस एक और सिनात्रा ऐप बनाएं। मॉडल कक्षाओं और हेल्पर्स में साझा कार्यक्षमता रखें, और अपने सभी ऐप्स को रैक के साथ एक साथ चलाएं।

module HelloHelpers 
    def say_hello 
    "Hello" 
    end 
end 

class Hello < Sinatra::Base 
    helpers HelloHelpers 

    get "/?" do 
    @message = say_hello 
    haml :index 
    end 
end 

class HelloAdmin < Sinatra::Base 
    helpers HelloHelpers 

    get "/?" do 
    @message = say_hello 
    haml :"admin/index" 
    end 
end 

config.ru:

map "/" do 
    run Hello 
end 

map "/admin" do 
    run HelloAdmin 
end 

स्थापित Thin, और thin start के साथ अपने अनुप्रयोग चलाने के।

+0

धन्यवाद! मेरा लक्ष्य मूल रूप से एकाधिक नियंत्रक बनाने के लिए है। मुझे यकीन नहीं है कि इस तरह से ऐसा करने के लिए सबसे अच्छा तरीका है - चूंकि रन क्लास का उपयोग करते समय एक वर्ग पूरे ऐप के रूप में चलता है? कोई सुझाव? – dbgpyd

+0

बस मेरे उत्तर को अपडेट करने के लिए एक तरीका शामिल करें जिसमें आप अपने आवेदन को कई कक्षाओं में विभाजित कर सकते हैं। –

+0

बहुत बढ़िया। धन्यवाद। – dbgpyd

0

आप Sinatra Helpers का उपयोग करना चाह सकते हैं।

+0

यह एक टूटी हुई लिंक है। यहां सिनात्रा हेल्पर्स http://www.sinatrarb.com/intro.html#Helpers पर दस्तावेज़ हैं – cevaris

संबंधित मुद्दे