RoR: Философия ActiveRecord

Статья о том как:

  • Ruby Rails приложение взаимодействует с базой данных
  • Об ActiveRecord, реализации ORM в Ruby On Rails

Сегодня в нашей заметке мы рассмотрим паттерн под названием ActiveRecord, который представляет из себя средство работы с базой данных. Сразу же попрошу профессионалов сильно такого рода заметки не критиковать. Написаны они лишь для того, чтобы заитересовать, дать стимул читать такие книженции как Agile Web Development with Ruby on Rails.

ActiveRecord правильнее даже будет назвать реализацией технологии ORM:
«ORM (англ. Object-relational mapping) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных»

ActiveRecord в Ruby on Rails очень меня порадовал, когда впервые с ним познакомился. Его реализации можно найти в разных веб фреймворках, как RoR, CakePHP, Castle и так далее. Идея его состоит в том, что каждая таблица базы данных превращается в класс, каждая строка таблицы в объект этого класса. ActiveRecord обеспечивает методы работы с данными каждого столбца таблицы.

Скажем, пусть у нас будет таблица с данными Хабра-населения users, тогда добавить запись о новом комраде, желающем пополнить эти стройные ряды можно будет таким образом:

x = User.new
x.name = "Роман Иванов"
x.login = "ivanov"
x.email = "no@reply.com"
x.homepage = "ivanov-thebest.com — просто лучший и все здесь"
x.save

Эти магические операции создадут и отправят в базу следующий запрос:

INSERT INTO users (name, login, email, homepage) VALUES
\ ('Роман Иванов', 'ivanov', 'no@reply.com', 'ivanov-thebest.com — просто лучший и все здесь');


С не меньшим успехом можно искать и выбирать записи из базы таким образом:

#найдем всех пользователей
f = User.find(:all)
#найдем пользователя с логином ivanov
search_str = "ivanov"
f = User.find(:first, :conditions => ["login = ?", search_str])

Такой прием автоматически защитит нас от SQL-инъекции (это будет сделано Рельсам за нас в варианте приведенном выше), а также сгенерирует следующий запрос:

SELECT * FROM users WHERE login = 'ivanov'

Благодаря Рельсам и их заботливым разработчикам приведенное выше можно сделать еще проще:

f = User.find_by_login("ivanov")

Вот, в самом кратком кратце все, снасти расставлены :) А кто заинтересовался советую начать со странички РельсоВики посвященной ActiveRecord, а дальше (если сразу хочется поперед батька в пекло) открыть Active Record Reference Documentation.

Вход для пользователей