Возьмите следующий кодекс:
### 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
, и все те переменные, доступные всему сценарию, а также взглядам. Я пытался делать их глобальными переменными, но провал.
может быть не «чистый» способ сделать это, но настроить их в качестве опций, которые должны работать:
-> http://www.sinatrarb.com/configuration.html :)
Настройка:
set :foo, 'bar'
Получение:
"foo is set to " + settings.foo
Сделать их константы. Они должны быть в любом случае, если они не должны? Они не собираются меняться.
Сделайте постоянную, написав его во всех крышках.
Прочитайте эту статью о Ruby Vianable Scopes, если у вас есть еще вопросы. http://www.techotopia.com/index.php/ruby_variable_scope
Другой вариант чистого может быть классом конфигурации, где метод init загружает yaml, а затем устанавливает переменные.
веселиться. @reply Me, когда вы закончили свой новый блог (я предполагаю, что это то, что это для).
Из Sinatra README:
Шаблоны оцениваются в том же контексте, что и обработчики маршрутов. Переменные экземпляра, установленные в обработчиках маршрутов, напрямую доступны шаблонам:
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
Это обычно используется при отображении шаблонов как частей внутри других шаблонов.
Третьим вариантом было бы установить для них аксессоры в виде вспомогательных методов. (Которые также доступны во всем приложении и представлениях)
.