2010-01-25 15 views
8

निम्नलिखित कोड डालें:सिनात्रा चर का दायरा

### Dependencies 
require 'rubygems' 
require 'sinatra' 
require 'datamapper' 

### Configuration 
config = YAML::load(File.read('config.yml')) 

name = config['config']['name'] 
description = config['config']['description'] 
username = config['config']['username'] 
password = config['config']['password'] 
theme = config['config']['theme'] 

set :public, 'views/themes/#{theme}/static' 

### Models 
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/marvin.db") 

class Post 
    include DataMapper::Resource 
    property :id, Serial 
    property :name, String 
    property :body, Text 
    property :created_at, DateTime 
    property :slug, String 
end 

class Page 
    include DataMapper::Resource 
    property :id, Serial 
    property :name, String 
    property :body, Text 
    property :slug, String 
end 

DataMapper.auto_migrate! 

### Controllers 
get '/' do 
    @posts = Post.get(:order => [ :id_desc ]) 
    haml :"themes/#{theme}/index" 
end 

get '/:year/:month/:day/:slug' do 
    year = params[:year] 
    month = params[:month] 
    day = params[:day] 
    slug = params[:slug] 

    haml :"themes/#{theme}/post.haml" 
end 

get '/:slug' do 
    haml :"themes/#{theme}/page.haml" 
end 

get '/admin' do 
    haml :"admin/index.haml" 
end 

मैं name बनाना चाहते हैं, और उन सभी चर पूरी स्क्रिप्ट के लिए उपलब्ध है, साथ ही देखा गया। मैंने उन्हें वैश्विक चर बनाने की कोशिश की, लेकिन कोई पासा नहीं।

उत्तर

9

"साफ" जिस तरह से यह करने के लिए नहीं किया जा सकता है, लेकिन उनमें सेटिंग विकल्प के रूप में काम करना चाहिए:
->http://www.sinatrarb.com/configuration.html :)

सेटिंग:

set :foo, 'bar' 

हो रही:

"foo is set to " + options.foo 
+4

का उपयोग करते हुए 'options' होगा कोई बाद सर्वर को पुनः आरंभ करने एक चेतावनी फेंक दें: 'सिनात्रा :: बेस # विकल्प बहिष्कृत किए गए हैं और हटा दिए जाएंगे, इसके बजाय #settings का उपयोग करें। इसके बजाय' सेटिंग्स' का उपयोग करें। – briangonzalez

9

उन्हें स्थिरांक बनाएं। वे वैसे भी नहीं होना चाहिए? वे बदलने के लिए नहीं जा रहे हैं।

सभी कैप्स में इसे लिखकर निरंतर बनाओ।

यदि आपके पास कोई और समस्या है तो रूबी वैरिएबल स्कोप्स पर इस आलेख को पढ़ें। http://www.techotopia.com/index.php/Ruby_Variable_Scope

एक और साफ विकल्प कॉन्फ़िगरेशन क्लास हो सकता है, जहां init विधि YAML लोड करती है और फिर चर सेट करती है।

मज़े करें। @reply me जब आपने अपना नया ब्लॉग पूरा कर लिया है (मुझे लगता है कि यह वही है जो यह है)।

5

Sinatra README से:


टेम्पलेट्स

टेम्पलेट्स में पहुँचना चर मार्ग संचालकों के रूप में ही संदर्भ में मूल्यांकन किया जाता है। उदाहरण चर मार्ग संचालकों में सेट टेम्पलेट्स द्वारा direcly सुलभ हैं:

get '/:id' do 
    @foo = Foo.find(params[:id]) 
    haml '%h1= @foo.name' 
end 

या, स्थानीय चर का एक स्पष्ट हैश निर्दिष्ट करें:

get '/:id' do 
    foo = Foo.find(params[:id]) 
    haml '%h1= foo.name', :locals => { :foo => foo } 
end 

यह आमतौर पर जब अन्य टेम्पलेट्स के भीतर से प्रतिपादन आंशिक रूप टेम्पलेट्स प्रयोग किया जाता है।


एक तीसरा विकल्प उनके लिए सहायक विधियों के रूप में एक्सेसर्स सेट अप करना होगा। (जो भी आवेदन और विचारों भर उपलब्ध हैं।)

1

क्या भी काम करता है:

@@foo = "bar" 

लेकिन यह न भूलें इस परिवर्तन

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