Ruby on Rails

Ruby on Rails 3: Введение в ActiveRecord

февраля 9, 2012  |  Published in Ruby on Rails, Ruby on Rails 3

ruby on rails tutorialRubyDev — ваш друг в изучении Ruby и Rails!

В этой главе вы узнаете более подробно о том, что такое модель, чем занимается ActiveRecord входящий в состав Ruby on Rails, что такое ORM и что такое миграции.

Что такое модель?

Из предыдуших глав или из своего опыта разаботки на других языках программирования и платформах вы уже должно быть знаете, что такое модель, но я вынужден повториться:

Модель — это часть приложения, которая непосредственно работает с данными, то есть хранит бизнес-логику приложения.

В Ruby on Rails модельная прослойка реализована в виде модуля ActiveRecord. ActiveRecord предоставляет паттерн ORM для работы с записями в базе данных и не только ORM.

Что такое ORM?

ORM (Object Relation Mapping) — паттерн проектирования, который сводится к достаточно простой вещи — представлению записей в виде объектов.

Что такое ActiveRecord?

ActiveRecord — это фреймворк для работы с реляционными базами данных (MySQL, PostgreSQL, SQLite и т.д.). ActiveRecord реализует в себе не только паттерн ORM, но и миграции, валидацию, обратные вызовы (коллбеки), паттерн «Наблюдатель», ассоциации между записями и много-много чего еще.

В приложении на Ruby on Rails модели хранятся в директории app/models вашего приложения в файлах, что носят имена соответствующие именам классов-моделей: Post -> app/models/post.rb.

Модель в случае использования ActiveRecord представляет собой класс наследуемый от класса — интерфейса ActiveRecord::Base, например:

class Post < ActiveRecord::Base
end

Приведенный выше пример модели наследуясь от класса ActiveRecord::Base наследует от него всю мощь ActiveRecord, по этому приведенные выше две строки кода уже умеют делать очень многое!

Что такое миграции?

Миграции — это файлы в которых описывается структура базы данных. Каждый раз, когда вы используете генератор для создания ActiveRecord модели — вы создаете и соответствующий ей файл миграции. Вы можете создавать миграции отдельно от моделей, например, когда вам необходимо добавить или удалить поля в уже существующей таблице.

Миграции очень удобны для создания и редактирования и управления структурой базы данных. Миграции позволяют абстрагироваться от базы данных и использовать код написанный на изящном Ruby для определения схемы базы данных. Кроме того миграции упрощают разворачивание вашего проекта на сервере и позволяют всего одной командой создать все необходимые для работы приложения таблицы в базе данных.

 

Лучшая благодарность автору — ваши комментарии и популяризация ресурса! Спасибо всем за внимание к проекту и моральную поддержку его автора. Не забывайте о нашей группе во Вконтакте: !

Tags: , , , , ,

Ruby on Rails 3: Знакомьтесь, Rails

февраля 9, 2012  |  Published in Ruby on Rails, Ruby on Rails 3

ruby on rails tutorialRubyDev — ваш друг в изучении Ruby и Rails!

Эта статья представляет собой краткое введение в веб-фреймворк Ruby on Rails. Она расскажет вам о том, что такое веб-фреймворки, какие выгоды от использования они дают разработчику и как Rails выделяется среди остальных веб-фреймворков. Кроме того в этой статье мы рассмотрим устройство приложения разрабатываемого на Ruby on Rails, архитектурный паттерн  MVC, принципы CoC и DRY.

Что такое веб-фреймворк?

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

Веб-фреймворк — соответственно фреймворк ориентированный на разработку веб-приложений.
Read the rest of this entry »

Tags: , , , ,

Заполнение базы данных тестовыми данными при помощи seed-fu

декабря 24, 2011  |  Published in Ruby on Rails, Тестирование

Я отношусь к тойкасте людей, что не воспринимают интеграционные тесты. Программа не может оценить внешний вид приложения так, как то может сделать человек. По этой причине я предпочитаю сам смотреть на то, как выглядит приложение. Для того, чтобы это изучение приложения было максимально приближена к реальности — необходимо заполнять базу тестовыми данными, кроме того, тестовые данные необходимы для тестирования производительности приложения на «реальных» данных. В Rails имеется встроенный механизм seed-ирования базы данных, однако он мне не очень нравится и в этой статье я рассказывать о нем не буду. Вместо встроенного функционала я предпочитаю использовать seed-fu — отличное решение поставляемое в виде совсем обыкновенного gem’а, которое делает заполнение БД тестовыми данными более удобным.
Read the rest of this entry »

Tags: , , ,

SASS / SCSS в Rails

ноября 3, 2011  |  Published in ClientSide, CSS и верстка, Ruby on Rails, Ruby on Rails 3, View

sass cssВот и дошли мои руки, ноги и сознание до изучения такой штуковины, как SASS / SCSS.

SASS — это синтаксический сахар для CSS. Аббревиатура SASS расшифровывается как Syntactically Awesome StyleSheets.

SCSS — это новое название SASS начиная с 3й версии и расшифровывается как Sassy CSS. Основное отличие SCSS — это улучшенная поддержка CSS3 и то, что в SCSS можно писать на каноническом CSS (можно сказать, что SCSS является надмножеством CSS).

SCSS позволяет писать стили вашего приложения с использованием очень мощных расширений стандартных возможностей CSS: возможности использовать переменные в стилях, подмешивания примесей, удобный синтаксис объявления стилей вложенных элементов и т.д. Все это мы рассмотрим в нашей статье, но не просто рассмотрим, а рассмотрим на примере использования в приложении на Rails.

Я уже писал на RubyDev об использовании языка HAML в Rails и с тех пор я стал его активно использовать вместо стандартного ERB. В этой статье я расскажу об SASS / SCSS. SASS / SCSS является проектом созданным под вдохновением от HAML, кроме того, чаще всего SCSS и HAML используются вместе. Эту статью о SASS / SCSS и статью о HAML можете считать предисловием к грядущим статьям по Compass и AssetsPipeline в Rails 3.1. Конкретно в данной статье рассматривается использование SASS / SCSS в приложении на Rails 3.0.9.
Read the rest of this entry »

Tags: , , ,

RDR3R: Callbacks (коллбеки — обратные вызовы) в Rails

октября 5, 2011  |  Published in Ruby on Rails, Ruby on Rails 3

Callbacks — колбеки (обратные вызовы) — это вызов методов как реакция на какое-нибудь действие объекта. Коллбеки привязываются к определенным методом и могут быть выполнены до или после вызова метода к которому они прикреплены. Например, когда в Rails вы используете ассоциацию с зависимостью, например такую:

Post has_many :comments, :dependent => :destroy

То после действия destroy для объекта — записи запускается соответствующий after_destroy коллбек, который выполняет удаление всех принадлежащищ Post’у комментариев.

В Rails существуют коллбеки модели и колбеки контроллеров, в Sinatra (Rack) существуют коллбеки обработчиков запроса, даже в RSpec существуют коллбеки before и after для подготовки и удаления данных для спецификаций.
Read the rest of this entry »

Tags: , , ,

HAML в Rails

октября 2, 2011  |  Published in ClientSide, Ruby Gems, Ruby on Rails, Ruby on Rails 3, View

haml logoHAML — очень удобный язык разметки который призван заменить HTML. HAML это также шаблонизатор, который компилирует код на HAML + Ruby  в HTML, который представляется пользователю.

Мне надоел стандартный ERB, надоели закрывающие теги, надоело, что порой бывает сложно понять что во что вложено, и я решил полностью перебраться на HAML. Если вы еще не слышали о HAML, то это не означает, что HAML — это что-то экзотическое, напротив, HAML использует большинство Rails разработчиков, так активно используют, что даже удивились, почему Rails Core Team невключили HAML в Raila 3.1. как шаблонизатор по умолчанию.

Начать работу с HAML совсем просто!

Read the rest of this entry »

Tags: , , ,

Делаем простую пагинацию в Rails 3 ч. 2

августа 24, 2011  |  Published in Ruby on Rails, Ruby on Rails 3

В предыдущей статье мы сделали самую простую пагинацию, которая выводит ссылки на все существующие страницы. В этой статье мы несколько расширим функционал.

 

 

 

Для начала откроем хелпер постов:

#../app/helpers/posts_helper.rb
module PostsHelper
end

В этот хелпер мы поместим весь код отвечающий за представление ссылок пагинации.
Сразу оговорюсь (предсказывая гневные комментарии типа: «Что за говнокод?»), что данная статья не ставит целью описать окончательный вариант разработки пагинации. Рефакторинг, добавление конфигурирования представления ссылок и т.д. будет рассмотрено в следующей статье или статьях. Это пошаговое руководство разработки пагинации, которое показывает не только правильный вариант пагинации, но и попутно демонстрирует распространенные у новичков ошибки.

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

Read the rest of this entry »

Tags: ,

Делаем простую пагинацию в Rails 3 ч. 1

августа 23, 2011  |  Published in Ruby on Rails, Ruby on Rails 3

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

Я отношусь к той когорте людей, что считает, что использование различных гемов для пагинации типа kaminari или will_paginate является лишним, точнее избыточным и не достаточно гибким. Кто-то может бросить в меня камень или помидор со словами: «Необходимо использовать готовые протестированые решения, а не писать свои велосипеды!», и будет прав, но, в случае с пагинацией я не согласен, ибо реализовать пагинацию очень просто. В этой статье я постараюсь привести пример разработки такой пагинации, которая будет удовлетворять вас, в 99% случаев.

Код нашей пагинации состоит из двух основных частей и роутинга:

1. Код выборки — отвечает за выборку записей из БД в соответствии со страницей для которой осуществляется выборка,
2. Код представления — отвечает за представление ссылок на страницы,
3. … и роутинг =)
Read the rest of this entry »

Tags: ,

RDR3R > Простое форматирование дат в Ruby on Rails

августа 3, 2011  |  Published in Ruby on Rails, Ruby on Rails 3

В этой совсем простой статья я расскажу о том как легко и просто можно форматировать дату и время в ваших приложениях на основе Ruby on Rails без использования стороннего кода.

Начну с того, что в Ruby on Rails, а точнее в ActiveSupport в расширениях для Ruby присутствует расширения для класса Date. Полный путь, если что выглядит так: .  Это расширение базового Date содержит в себе константу DATE_FORMATS которая позволяет сохранять форматы даты и времени и давать им имена (DATE_FORMATS является хэшем). Благодаря этому вы можете один единственный раз определив необходимый вам формат повсеместно использовать его в вашем приложении.
Read the rest of this entry »

Tags: ,

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: , , ,