ruby on rails пример кода

Ruby on Rails шаг за шагом. #1 Теория

Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Целью первой части уроков по Ruby on Rails будет создание некоторого многопользовательского блога (аля Хабр). Также хочется отметить, что для этой первой части желательно иметь познание о Руби хотя бы на уровне трех-четырех капель. Хочется поскорей приступить к кодингу, но начинать все равно придется с теории.

RoR – базирующийся на Руби фрэймворк

ЯП Руби – простой и мощный, возможность мета-программинга, блоков, итераторов, а также обработки исключений делает язык замечательной основой для фрэймворка. Собственно так и посчитал Дэвид Хэйнемеер Ханссон, создатель RoR, и в июле 2004 года фрэймворк вышел на свет.
Увидеть, как помогает мета-программирование Руби, можно увидеть в ORM компоненте RoR Active Record. Основываясь на имени класса, RoR считывает схему (schema) и налету создает объекты класса на базе таблицы БД. Можно перейти к следующему аспекту.

RoR реализует MVC

Active Record

Action View

Action Controller

Три среды

Эпилог

Да, да, и тут эпилог — без него никуда 😉 Сегодня мы с вами узнали о том, что такое MVC, как его реализуют Rails, узнали роль компонентов фрэймворка, узнали, как они сообщаются между собой. Взглянули даже на разные среды, которые предоставляют нам Rails. Если все понятненько, то можно начинать обустраивать рабочее место! Комментарии страстно желаемы 😉

PS: Этот номер написан по мотивам книги Building Dynamic Web 2.0 Websites with Ruby on Rails. Однако с литературой по Rails стоит быть максимально осторожным, поскольку фрэймворк развивается неуловимыми темпами, и почти все книги (даже 2008 г. выпуска, в том числе и эта) основана на старых версиях Rails (1.2.x)

Источник

Код в стиле Ruby: грамотно, красиво и рационально. Пример для начинающих

ruby on rails пример кода. 9c1f4cf227bf427254c84cd607314324. ruby on rails пример кода фото. ruby on rails пример кода-9c1f4cf227bf427254c84cd607314324. картинка ruby on rails пример кода. картинка 9c1f4cf227bf427254c84cd607314324. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Это перевод поста Майкла МакКи. Майкл — профессиональный программист, который время от времени делится своим опытом и навыками с коллегами, как начинающими кодерами, так и профессионалами.

Большинство программистов в последнюю очередь думают об эстетике кода, который они создают. Конечно, общих правил придерживаются почти все. Но что, если пойти дальше? Хороший код, в первую очередь, должен работать. Но я считаю, что у него должен быть свой стиль, это касается не только содержания, но и формы.

Skillbox рекомендует: Практический годовой курс «PHP-разработчик с нуля до PRO».
Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».

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

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

Давайте рассмотрим этот пример.

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

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

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Уф! Намного лучше. Теперь мы видим, что к чему относится и каким образом. Но и этот код можно улучшить. Декларирование attr_reader и attr_accessor можно сделать еще более выразительным.

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Объявление каждого нового атрибута с новой строки гораздо легче воспринимается. Теперь у нас есть список атрибутов, которые присвоены каждому аксессору. Можно пойти и дальше.

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Здесь уже легко понять, где есть только возможность чтения, где — и чтения, и записи.

Давайте теперь посмотрим на следующую часть этого класса — метод инициализации. Здесь можно сделать много чего.

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

В принципе, код читаем, вроде бы все хорошо. Но можно сделать и лучше.

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

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

Давайте посмотрим, как теперь будет выглядеть InvoiceItem целиком.

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Теперь у нас есть класс, который легко читаем и понятен с первого взгляда. Присваивания легко подбираются, аксессоры атрибутов просто использовать.

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

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Ох, блин. Здесь в самом начале создается новый репозиторий для хранения классов транзакций. Всего их три, каждый используется для теста, попадания в хеш для более позднего использования. Причем для класса, который мы собираемся создавать, требуется немало атрибутов. Каждый из них имеет довольно длинное имя и значение. Что можно улучшить так, чтобы код выглядел хорошо?

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Мы разбили каждый из этих хешей с разрывом строки при каждом новом объявлении значения. Кроме того, использован тот же метод, что и при оптимизации InvoiceTeam. Теперь в редакторе без проблем можно видеть все тестовые данные в довольно узкой области обзора. Мы можем видеть значения ключей. Если нужно, их можно изменить без скроллинга туда-сюда.

Аналогичную стратегию можно использовать, когда мы работаем с большим количеством атрибутов.

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

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

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Новый код читаем — и гораздо более human friendly, если так можно выразиться. У нас ясно видны все атрибуты и присваивания. Возможный дебаггинг становится проще. Что-то может пойти не так, и потом выяснять, что и почему не работает, будет сложно, если не привести код к «красивому» виду.

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

Ну и в конце — мой любимый пример для Ruby. Давайте его рассмотрим.

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Давайте возьмем каждый элемент из animals и применим метод capitalize. Это выглядит неплохо, но еще лучше то, что код можно немного сократить и сделать его более читаемым для человека.

ruby on rails пример кода. image loader. ruby on rails пример кода фото. ruby on rails пример кода-image loader. картинка ruby on rails пример кода. картинка image loader. Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

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

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

Источник

Ruby on Rails: Создание приложений с меньшими усилиями

Если вы разрабатываете сайты, то наверняка слышали о Ruby on Rails (RoR). Но если вы дизайнер, разработчик интерфейсов или используете PHP без какого-либо фреймворка, то изучение Ruby on Rails может показаться вам трудным. В этой статье я расскажу вам о возможностях Ruby on Rails, постараюсь убедить вас, что нет ничего сложного в переходе на Рельсы, и вы с легкостью сможете освоить их без потери большого количества времени.

Конечно, понадобится время, чтобы узнать новые способы сделать то, что вы делали с помощью другого языка программирования, узнать некоторые новые методы и понятия. На короткое время, в связи с переходом на Rails, ваша производительность снизится. Тем не менее, я уверен, что многие веб-разработчики станут более продуктивными, будут создавать более совершенные сайты и получать больше удовольствия от программирования, используя Ruby on Rails.

Работа найдется для каждого

Ruby on Rails – это «full-stack» фреймворк, который охватывает разработку интерфейса и программной части проекта. Это делает его исключительно мощным инструментом в руках веб-разработчиков. Даже если вы в первую очередь дизайнер интерфейсов или back-end разработчик, вы можете использовать Ruby on Rails достаточно эффективно. Первые для клиентской части (HTML, CSS, JavaScript), вторые – для серверной (Ruby, Rails, frameworks). Вам нет необходимости изучать обе части, вы можете сосредоточиться на какой-то одной.

Поэтому, при приближении к изучению Ruby on Rails вы должны знать, какие проекты можно реализовать с помощью данного фреймворка и языка Ruby.

Золотая середина

Ruby on Rails лежит в основе таких веб-приложений и сайтов, как Basecamp, Blinksale, Revolution Health, YellowPages.com и, конечно же, Twitter. Энтузиазм разработки на Rails распространяется во многих крупнейших интернет-компаниях. Yahoo, eBay, Amazon, AOL – все они имеют проекты на RoR, а компания ThoughtWorks занимается разработкой корпоративных приложений в среде Rails.

Повышенная производительность

Одной из основных причин повышенной производительности Ruby on Rails является то, что он позволяет создавать новые приложения без написания большого количества кода и хаков. Проще говоря, сочетание языка (Ruby) с фреймворком (Rails) означает, что вы можете делать больше с меньшим количеством кода. Небольшое количество структурированного кода позволяет относительно безболезненно вносить изменения и экспериментировать.

Конечно, изучение нового инструмента разработки требует времени. Однако, если вам нужно создать всего один проект, это не оправдано. Но если вы планируете создание сайтов в течение некоторого времени и они будут не реализуемы стандартными средствами (CMS), то имеет смысл инвестировать свое время в изучение Ruby on Rails, так как это окупится в долгосрочной перспективе.

Чтобы понять, что можно сделать больше с меньшими усилиями с использованием Ruby on Rails, давайте начнем с беглого взгляда на Ruby.

Знакомьтесь – Ruby

Хотя Ruby (язык) и Rails (framework) – разные вещи, они во многом дополняют и зависят друг от друга. Все RoR приложения написаны на Ruby и характер Ruby имеет большое влияние на Rails-приложения. Есть фреймворки, такие, как CakePHP, которые многое заимствуют из Rails. Но мощь Ruby on Rails делает приложения более чистыми и гибкими, чем многие другие фреймворки. Если вы собираетесь изучать Ruby, что не является сложным, то получите значительный выигрыш в будущем.

Rails подход

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

При использовании фреймворков, таких, как Ruby on Rails, большинство вопросов о том, как структурировать код, решено за вас. Ттакже в вашем распоряжении имеется мощный набор библиотек.

Другой важной характеристикой Rails является то, что он организует вокруг каждого приложения структуру модель-вид-контроллер (MVC). MVC предоставляет весь код в виде структуры, которая очень помогает при работе над несколькими проектами или при привлечении кого-то другого для работы над сайтом. Он также предоставляет отдельные файлы с кодом интерфейса, которые могут быть разделены между front-end и back-end разработчиками.

Базы данных и объекты

Ruby on Rails предназначен для создания приложений, взаимодействующих с базами данных. Для этого в ядре Rails предусмотрена библиотека Active Record, которая реализует то, что называется объектно-реляционным отображением (ORM). С ORM вы можете работать с объектами, предоставляющими данные, а библиотека Active Record позаботится о взаимодействии с базой данных.

Это может показаться немного непонятным, поэтому давайте разберем на примерах. Даже не зная Ruby или другой объектно-ориентированный язык, уверен, вы сможете разобрать следующие примеры Ruby on Rails кода.

Предположим, у вас есть книжный интернет-магазин, и вы хотите добавить новую книгу. Вы могли бы написать:
newbook = Book.new

Вы можете задать класс «книге», который также будет являться объектом, указав атрибут интуитивным способом «newbook.»:
newbook.title = «Программирование на языке Ruby»
newbook.author = «Хэл Фултон»

На данный момент у вас есть объект в памяти. Все это занимает:
newbook.save

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

Теперь вы хотите найти эту книгу из миллионов книг в базе данных. Просто напишите:
angle_of_repose = Book.find_by_title «Программирование на языке Ruby»

И у вас есть объект, который вы назвали «angle_of_repose». Он имеет всю информацию из соответствующей записи в базе данных.

В RoR есть богатый набор программных объектов, которые соответствуют таблицам базы данных. Эти объекты составляют «модель» в системе модель-вид-контроллер.

Код взаимодействует с модельными объектами, а Active Record создает SQL-запросы. Вам не нужно писать их самостоятельно. И, поскольку, ни один фрагмент кода не связывается напрямую с базой данных, вы можете переключаться между ними путем простого изменения параметров конфигурации.

Виды и контроллеры

Для создания веб-страниц, Rails предоставляет систему шаблонов, что делает его простым в использовании, позволяет вставлять общие компоненты без повторения их кода, информацию из базы данных, а также отображать и обрабатывать формы. Эти шаблоны представляют собой «вид» в системе модель-вид-контроллер.

Если вы разработчик интерфейсов, на этой части Rails вы должны сосредоточить свое внимание. Вы можете считать, что в ваши файлы будут переданы переменные, которые содержат все сведения, необходимые для отображения. Подобно тому, как PHP-файлы сочетают в себе PHP и HTML код, типичный вид Rails представляет собой смесь Ruby и HTML. Продолжим объяснение на примере нашего интернет-магазина. Например, вот фрагмент кода, который отображает название и автора книги:

Код Ruby отмечен ; остальное HTML.

Rails имеет встроенную поддержку для Prototype и Scriptaculous JavaScript библиотек, а также объект, называемый Ruby JavaScript (RJS), для создания Ajax-интерфейсов. Вы можете написать почти все, что в Ruby, в том и числе код, который выполняется на стороне клиента, как JavaScript.

«Контроллер» является частью кода Ruby. Его основная работа заключается во взаимодействии с моделью для подготовки данных, необходимых виду». Любая информация собрана контроллером в набор переменных перед вызовом вида. Контроллер также отвечает на запросы Ajax после загрузки страницы. Контроллеры обеспечивают множество других функций – от аутентификации пользователей до обработки ошибок.

Ничто не идеально

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

Также есть проблема с размещением Rails-приложений. Из-за размера кода фреймворка Rails, он должен храниться в памяти все время и загружен в ответ на запрос. Вам необходимо 100-200 Мб встроенной памяти для размещения приложений даже с низким трафиком. Для сравнения, приложения на PHP вы можете разместить сколь угодно, потому что они не занимают память, когда недоступны.

Из-за этих требований к серверу, найти виртуальный хостинг для Rails-приложений, как правило, весьма проблематично. VPS (Virtual Private Server) – самый лучший выбор. Настройка сервера сложнее, чем для PHP. Но сейчас есть много Rails-ориентированных хостинг-компаний, которые предоставляют готовые решения.

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

Обучение

Изучение Rails может быть трудным для новичка и потребует несколько месяцев, чтобы разобраться в синтаксисе и ООП. Но уже с начала обучения вы сможете создать простой сайт. В процессе работы над ним вы получите новые навыки и знания, которые вам нужны.

Заключение

Как только вы изучите Ruby on Rails, он станет вам верным другом. С помощью этого мощного набора инструментов в ваших руках вы будете работать более продуктивно, чем когда-либо.

Будучи в состоянии сделать больше с меньшими затратами, вы будете создавать лучшие проекты и получать больше удовольствия от процесса. Приятного обучения!

Источник

Знакомство с Ruby on Rails (часть 2)

В продолжении статьи ”Первое знакомство с Ruby on Rails” мы научимся работать с базой данных, и создадим каталог статей.
Узнаем как написать плагин, попробуем использовать AJAX и рассмотрим некоторые проблемы при развёртывании приложения на хостинге.

Начнем с базы данных.

Я работаю с MySQL, поэтому примеры установки будут для неё.

Пользователям Windows нужно скачать и установить MySQL-5.0.

Пользователям Linux (Ubuntu) еще проще:

После установки проверим что сервер работает:

Настало время создать нужные базы данных. Потребуется их две – одна для разработки и одна для тестирования:

Осталось протестировать соединение приложения с базой данных. Идём в папку с приложением и набираем

Если появляются сообщения об ошибках, значит где-то вы ошиблись в настройках соединения, проверьте их.

Введение в работу с БД.

Связь объектов и баз данных в рельсах осуществляется с помощью OR меппера, который называется ActiveRecord. Он занимается отображением полей из таблицы БД в поля объекта, валидацией объектов перед сохранением, генерацией кода для представления связей между объектами.

Чтобы создать новую модель достаточно наследоваться от класса ActiveRecord::Base

По умолчанию ActiveRecord будет работать с таблицей названной также как класс, только во множественном числе. В нашем случае Articles.

Ко всем полям таблицы можно получить доступ с помощью методов с тем же названием:

ActiveRecord наглядно демонстрирует суть принципа “Convention over Configuration” – не требуется писать код для того, чтобы программа заработала, код нужен только когда программа должна работать не как обычно. Например:

ActiveRecord предоставляет много полезных функций, вот некоторые из них:

Что бы посмотреть документацию по ActiveRecord и другим установленным гемам нужно запустить

и открыть в браузере

Теперь давайте попробуем создать каталог.

Мы будем использовать script/generate чтобы создать модель, контроллер и вьюшки для каталога.

Я не буду включать в текст исходный код, чтобы не раздувать статью, его можно посмотреть online, я буду описывать для чего нужны различные куски кода.

Рельсы сгенерировали несколько файлов, посмотрим на некоторые из них:

С моделью думаю всё понятно, посмотрим на контроллер. У контроллера есть 7 методов:

Строчка map.resources :articles в файле config/routes.rb добавляет нужные правила маршрутизации урлов. Вот как выглядят созданные урлы:

PUT и DELETE это методы HTTP, как GET и POST.
Таким образом получилось уместить все необходимые для управления коллекцией методы в небольшой и понятный для пользователя набор урлов.

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

Поскольку ресурс однозначно идентифицируется урлом, основная работа приложения сводится к двум задачам – отдавать пользователю странички с указанным в урле ресурсом и проверять права доступа если ресурс не общедоступный. Поэтому писать и сопровождать веб приложения в стиле REST очень просто.

Посмотрим на результат, запускаем сервер

Я получил вот такую ошибку:

Изменения таблиц БД в рельсах делаются через механизм миграций. Одну миграцию рельсы сгенерировали для нас – создание таблицы articles ( db/migrate/001_create_articles.rb ). Нужно применить её к базе данных, идём в папку с приложением и запускаем

В результате миграции в базе данных была создана таблица articles, и теперь мы можем нажать в браузере F5 и поиграть с приложением.

Несколько слов о Rake.

У Мартина Фаулера есть отличная статья о Rake (на английском).

В результате база мигрирует до нулевой версии, когда еще не было создано ни одной таблицы. Это удобный способ очистить базу после экспериментов с приложением. Потом можно снова вызвать db:migrate без параметров, в итоге будут применены все миграции.

Каталог это здорово, но статьи не форматируются.

Надеюсь вы уже посмотрели на каталог и убедились в этом. Время заняться главной задачей приложения – форматированием статей.

Будем писать плагин.

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

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

Начнем. Прежде всего доверим рельсам создать для нас скелет плагина:

В папке vendor/plugins появился наш плагин. Что внутри:

Теперь осталось написать код для форматирования и добавить поддержку в ActiveRecord.

Как в Ruby добавить функциональность к существующему классу.

В Ruby все является обьектом, в этой простенькой программе

вызывается метод обьекта. У какого обьекта? Это объект типа модуль (аналог namespace, package), глобальный модуль называется Kernel. Модули похожи на классы, отличаются тем, что могут содержать только методы, константы и другие модули и классы. При этом руби позволяет подмешивать (mixin) модули в другие модули и классы, это делается с помощью методов extend и include у модулей и классов, например:

Пишем плагин.

Плагин состоит из двух модулей:

Теперь в init.rb добавим код инициализации:

и можно пробовать плагин в деле. Нужно поправить вьюшки, чтобы отображать отформатированный текст.

Причешем вьюшки и сделаем preview

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

Теперь создадим вьюшку для формы. Повторно используемые куски вьюшек в рельсах называются partials. Названия файлов partials начинаются с подчёркивания. Обычно они находятся там же где вьюшки, которые их используют.

После такого рефакторинга код вьюшек new и edit становится совсем простым и сводится к одной строчке:

Затем добавим правило в таблицу маршрутизации.

Теперь добавим поддержку на форму. Чтобы не загромождать вьюшку кодом сделаем вспомогательный метод. Этот метод создаёт кнопку, при нажатии на которую форма асинхронно отправляется на сервер и ответ отображается в переданном в метод элементе. Остаётся добавить кнопку и элемент для отображения отформатированной статьи во вьюшку.

Поскольку кнопка preview использует библиотеку prototype для асинхронной отправки запросов на сервер, нужно добавить её загрузку в шаблон страницы.

На этом функциональность второй версии можно считать завершённой.

Теперь можно убрать код, оставшийся с первой версии.

Немного об установке приложения у хостера.

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

Сначала разберемся с зависимостью от рельсов. Перед тем как заливать ваше приложение на хостинг очень полезно сделать следующее:

В результате в папке vendor/rails появится копия рельсов с которой вы разрабатываете ваше приложение, и сервер будет использовать её, так что беспокоиться о том, какая версия есть у хостера, больше не потребуется.

Помимо рельсов, приложение часто зависит еще от каких-то гемов, в нашем слечае это RedCloth и Maruku. Для решения проблем с этими зависимостями Dr Nic написал замечательный плагин – Gems on Rails. Работает он по такому же принципу – делает локальные копии гемов. Давайте его установим и научимся использовать:

Идем в папку с приложением и запускаем

Теперь у нас установлен плагин Gems on Rails, который добавил полезные задачи для Rake.

Давайте сделаем локалные копии гемов, нужных нашему приложению:

На этом все. Задавайте вопросы, читайте документацию и книгу о рельсах.

Главное пишите код!

PS. Пока писал последние строчки наткнулся на интересный сайт со скринкастами о рельсах.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *