- •Затверджений
- •02070743.00569-01 81 01
- •2.1. Вступ
- •02070743.00569-01 81 01
- •2.2.1.1. Статичний html
- •5 02070743.00569-01 81 012.2.1.2 Cgi
- •2.2.1.3. Active Server Pages і asp.Net
- •02070743.00569-01 81 01
- •702070743.00569-01 81 012.2.1.4. Asynchronous Javascript and xml
- •2.3. Мови реалізації мережевих технології
- •9 02070743.00569-01 81 012.3.3. C# і vb.Net
- •02070743.00569-01 81 01
- •2.4. Безкоштовні технології
- •02070743.00569-01 81 01
- •02070743.00569-01 81 01
- •2.5. Мова програмування Ruby
- •02070743.00569-01 81 01
- •02070743.00569-01 81 01
- •2.6. Конкретизація задачі
- •2.6.1. Ruby для Web-застосувань
- •02070743.00569-01 81 01
- •2.6.1.2. Ruby on Rails
- •2.6.1.3. Принципи і техніка
- •02070743.00569-01 81 01
- •02070743.00569-01 81 01
- •02070743.00569-01 81 01
- •2.6.1.5. Додаткові інструменти і бібліотеки
- •02070743.00569-01 81 01
- •2.7. Ruby і Web-сервер
- •02070743.00569-01 81 01
- •2.7.1. Модуль mod_ruby
- •02070743.00569-01 81 01
- •2.2.2. Сервер weBrick
- •02070743.00569-01 81 01
- •2.7.3. Сервер Mongrel
- •02070743.00569-01 81 01
- •26 02070743.00569-01 81 012.8. Особливості розробки алгоритмів для Ruby
- •02070743.00569-01 81 01
- •02070743.00569-01 81 01
- •02070743.00569-01 81 01
- •02070743.00569-01 81 01
- •02070743.00569-01 81 01
- •02070743.00569-01 81 01
1602070743.00569-01 81 01
Рис. 2.2. Архітектура шаблону MVC для Rails
Rails прекрасно справляється з автоматизацією не дуже складних завдань. Якщо це має сенс, він сам генерує код, позбавляючи програміста від необхідності писати його вручну [12].
Web-застосування часто зберігають дані в базі, і Rails забезпечує безшовну інтеграцію з базою даних. В Web-каркасах спостерігається тенденція проявляти схильність до якогось конкретного об'єктно-реляційного відображення (object-relational mapper, ORM), і Rails – не виключення. Стандартним для Rails є відображення ActiveRecord. На його основі будуються призначені для користувача моделі даних і зв'язуються з контролерами (рис. 2.3).
1702070743.00569-01 81 01
Рис. 2.3. Зв'язок управління web-застосування (контроллера) і БД (моделі)
Бази даних описуються у файлі config/database.уaml – одному з небагатьох необхідних конфігураційних файлів (звичайно ж, у форматі YAML). У ньому перераховано три різні бази даних: для розробки, для тестування і для промислової експлуатації. На перший погляд, це перебір, але насправді така схема виявляється дуже зручною.
Rails генерує порожні моделі і контролери. В ході редагування моделей ви визначаєте зв'язки між таблицями бази даних за допомогою таких методів, як has_many і belongs_to (і багато інших). Оскільки між моделями і таблицями є відповідність, то написаний вами код заразом визначає і зв'язки між самими моделями. Для контролю даних служать такі методи, як validates_presence_of (перевіряє, що дані присутні) і validates_uniqueness_of (перевіряє, що дані унікальні).
Рис. 2.4. Зв'язок управління web-застосування (контролера) і призначеним для користувача виглядом в браузері
В результаті створення застосування Rails командою вигляду rails appname ви отримуєте каталог appname з такою структурою:
18
02070743.00569-01 81 01
арр
controllers
helpers
models
views
config
db
doc
lib
log
public
script
test
vendor
Велика частина коду знаходиться в каталозі арр. Як бачите, сама його структура слідує патерну MVC. Схеми баз даних знаходяться в каталозі db. Інкрементні файли міграції теж попадуть сюди. У Rails є концепція «оббудовування» (scaffolding), яка дуже спрощує життя. Якщо ввести команду script /generate scaffold Product (Product – ім'я моделі), то для таблиці Products (звернете увагу на множину) згенерується функціональність «створити-відновити-видалити».
Можна оббудуватися і не генеруючи жоден код – досить викликати усередині контролера Product метод scaffold:
class ProductController < ActiveRecord::Base
scaffold :product
end
Слід зазначити, що в Rails процедура створення структури ActiveRecord для конкретної БД визначається командою
Rake DB:Migrate
19
02070743.00569-01
81 01
На основі даного каркасу і особливостей шаблону MVC, розглянемо загальну архітектуру Web-застосувань на основі Rails:
Рис. 2.5. Загальна архітектура Web-застосування, заснованого на MVC
2.6.1.4. Базові розширення
Одне з достоїнств Rails – наявність широкого набору допоміжних методів, визначених в модулі ActiveSupport::CoreExtensions. Вони нешкідливі і після додавання в основні класи стають доступні всьому застосуванню.
Деякі з цих методів мають відношення до роботи з датами і часом. Оскільки усередині системи час зберігається в секундах, то мають сенс методи minutes і hours:
20
02070743.00569-01 81 01
elapsed = 3.days + 4.hours + 17.minutes
later = Time.now + elapsed
Можна робити і такі речі:
time = 3.minutes.from_now #то ж, що Time.now + 3.minutes.
t2 = 5.days.from_now
Операції з часом представлені особливо повно. За допомогою методів midnight, next_month і beginning_of_week можна точно і коротко задавати моменти часу.
Один з найвідоміших трюків в цьому модулі – метод Symbol#to_proc. Він дозволяє передавати символ, що представляє ім'я методу, замість блоку. Наприклад, наступні дві пропозиції еквівалентні:
arr = array.map { |x| x.upcase }
arr = array.map { &:upcase }
Окрім згаданих тут методів, є ще десятки інших. Одні займаються перетворенням різних одиниць виміру часу, інші – перекладом з YAML або XML, треті, – перевіркою правопису і розставлянням розділових знаків в рядках і так далі [16].