RDR3R > Single Table Inheritance (STI) в Rails 3

июля 26, 2011  |  Published in Ruby on Rails, Ruby on Rails 3

Пришло мне тут два письма с просьбой написать о STI — наследовании от одной таблицы. Материал достаточно простой, однако, если люди просят — почему не уделить написанию статьи пол часика?

Признаться честно, мне не нравится термин STI применительно к Rails, поскольку на самом деле наследуются не таблицы, а классы. Здесь больше подходит термин Class Table Inheritance поскольку один класс наследуясь от другого получает доступ к таблице основного класса.

Разберемся с терминами.

Базовый класс — это класс от которого наследуются все остальные классы.

Наследуемый класс — здесь все понятно.

Для чего необходимо STI? — STI достаточно удобная штука и используется в двух основных случаях:

1. У нас имеются две и более моделей, которые имеют абсолютно одинаковые атрибуты, но должны вести себя по разному.

2. У нас имеются две и более моделей, которые имеют несколько общих атрибутов, общие атрибуты выносятся в отдельную таблицу и отдельную модель — базовый класс.

Read the rest of this entry »

Tags: , , ,

RDR3T > Логи и Уведомления в Rails 3, ч. 2: Уведомления

мая 22, 2011  |  Published in Ruby on Rails, Ruby on Rails 3, Тестирование

Rails 3 снабжен очень мощной системой уведомлений о происходящем внутри приложения. Давайте на примере простого приложения рассмотрим то, что есть уведомления и как с ними работать.

Мною было создано простое приложение с одной моделью и контроллером:

$ rails g scaffold User name:string email:string login:string

Именно на примере такого простого приложения мы и рассмотрим уведомления. Давайте запустим наше приложение:

После запуска приложения мы увидим в консоли следущее:

$ rails s
=> Booting WEBrick
=> Rails 3.0.7 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-05-22 11:48:04] INFO  WEBrick 1.3.1
[2011-05-22 11:48:04] INFO  ruby 1.9.2 (2010-08-18) [i686-linux]
[2011-05-22 11:48:04] INFO  WEBrick::HTTPServer#start: pid=3670 port=3000

Это означает, что приложение загружено в память и что сервер приложения был запущен, однако само приложение ничего не выполняет. При переходе на http://localhost:3000/ мы также ничего нового в консоли не убидим, поскольку мы перешли на статическую страницу приветствия, которая нам была отдана нашим сервером, по умолчанию, а не приложением. Однако, когда мы перейдем по адресу http://localhost:3000/users/ то есть приложение выполнит экшен index в контроллере UsersController, то в консоли мы увидим следущее:

Started GET «/users» for 127.0.0.1 at 2011-05-22 11:52:59 +0300
Processing by UsersController#index as HTML
User Load (0.8ms)  SELECT «users».* FROM «users»
Rendered users/index.html.erb within layouts/application (4.4ms)
Completed 200 OK in 158ms (Views: 11.4ms | ActiveRecord: 0.8ms)

Это называется записью логфайла, которая создается на основе уведомлений (Rails Notifications). Если интересно, то файлы логов можно найти в ../log/ в нашем случае это development.log по названию окружения в котором мы работаем. Файл логов содержит абсолютно то же, что было напечатано в консоли.

Если мы перейдем по ссылке создания нового пользователя, то в лог-файле и в консоли появится еще одно сообщение логера:

Started GET «/users/new» for 127.0.0.1 at 2011-05-22 14:20:03 +0300
Processing by UsersController#new as HTML
Rendered users/_form.html.erb (87.8ms)
Rendered users/new.html.erb within layouts/application (107.4ms)
Completed 200 OK in 431ms (Views: 153.4ms | ActiveRecord: 0.0ms)
Read the rest of this entry »

Tags: , , , , , ,

RDR3T > Логи и Уведомления в Rails 3, ч. 1: Логи

мая 22, 2011  |  Published in Ruby, Ruby on Rails, Ruby on Rails 3, Тестирование

Rails 3 снабжен очень мощной системой уведомлений о происходящем внутри приложения на основе которой строятся логи приложения. Не смотря на то, что уведомления первичны, мы начнем с лог файлов.

Логи — это журнал происшествий в вашем приложении, они основываются на уведомлениях, собственно уведомления и сообщают в подробностях о происшествиях в приложении. Происшествия — это цепочка действий в вашем приложении, которая следует за каким-либо действие пользователя: переходом на другую страницу, отправкой пользователем формы и так далее.

Все логи хранятся в папке ../log/ ваше приложения и записываются в файлы с именем окружения (development, test и production) и расширением *.log. Зачем логи нужны? По логам можно определить что делало приложение в определенный момент времени или увидить ошибки и попытки взлома приложения.

Rails, по умолчанию использует из Ruby StdLib. Давайте сначала расмотрим работу конкретно с этим логером вне контекста Rails.
Read the rest of this entry »

Tags: , , , , , ,

RDR3T > Подготовка рабочего места

марта 7, 2011  |  Published in Ruby on Rails, Ruby on Rails 3

RubyDev Rails 3 Tutorial

Подготовка рабочего места

Created_at: 07.03.2011
Version: 0.1
Rails_version: 3.0.5
Ruby_version: 1.9.2

Данный учебник предполагает, что вы используете в качестве операционной системы Ubuntu Linux. Если вы используете другу операционную систему, например Windows, то я рекомендовал бы вам установить Ubuntu, через специальную утилиту wubi, или просто с диска, как вторую операционную систему. Дело в том, что Ruby и Rails заточены конкретно под работу на *nix системах, а поддержка платформы Windows — это бремя, которое несут на себе разработчики Ruby и Rails для популяризации платформы. Даже если вы являетесь большим поклонником Windows, то в скором времени после начала изучения Ruby и Rails вы поймете необходимость работы на другой операционной системе, например Ubuntu, так как в Windows могую появляться различные ошибки, кроме того Windows ораничивает вас в наборе используемых инструментов, например некоторые gem’ы не совместивы с Windows.

Прежде, чем приступить к изучению программированию веб приложений на Rails, вам необходимо организовать рабочее пространство на вашем компьютере. Вам потребуется система контроля версий Git, которая на данный момент является наиболее популярной среди Ruby / Rails программистов, менеджер версий Ruby — RVM, который позволит вам использовать сразу несколько версий Ruby, а также организовать для каждой версии несколько рабочих окружений со специфическим набором gem’ов (каждый такой набор (окружение) имеет официальное название — gemset), а также сам Ruby версии 1.9.2. Read the rest of this entry »

Tags: , , ,