Статьи

Создание вашего первого приложения на Rails: модели

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

Сегодня я собираюсь показать вам быстрый пример создания простого приложения на Rails 3, чтобы дать вам представление о том, на что похожа работа с Rails. В этом уроке, состоящем из двух частей, мы будем создавать приложение на основе базы данных: сокращение URL-адреса с именем «Shorty».

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

Я собираюсь пролистать много материала, но там будут ссылки на более подробные объяснения, а в конце второй части — места, где вы сможете продолжить после прочтения этого урока.

Вещи, которые вы хотите знать

Для начала важно понять, что Rails построен на архитектуре MVC; то есть модель-представление-контроллер.

Модели отвечают за хранение данных и бизнес-логику. Представления отвечают за слой, с которым имеет дело пользователь. Контроллеры действуют как мост между моделями и представлениями. Другими словами, Views генерирует ваш HTML, Модели обрабатывают ваши взаимодействия с базой данных (и любую логику, основанную на этих данных), в то время как Контроллеры связывают их вместе, и вы размещаете логику, которая контролирует, где перенаправлен браузер и что может делать пользователь ,

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

В Rails также есть несколько других терминов, о которых вам полезно знать.

Маршрутизатор, по сути, отображает URL-адрес для конкретного действия на конкретном контроллере с условиями для запросов. Например, Rails знает, что когда вы получаете GET / urls, он должен вызывать действие Index для класса Controller URL-адреса.

Далее, в Rails есть Миграции — по сути, версионная схема базы данных — и набор инструментов, упрощающих работу с Миграциями. Это мощные инструменты, которые позволяют писать код, который настраивает базу данных, без необходимости вручную иметь дело с SQL (и, что более важно, упростить написание кода, который можно многократно использовать для нескольких механизмов баз данных).

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

Установка Ruby на Rails

Первая задача, которую нам нужно сделать, — установить на свой компьютер относительно свежую версию Ruby (1.8.7 или выше). Следует отметить, что Rails использует набор инструментов, очень загруженный из командной строки. Если вам неудобно работать в командной строке в Windows или в терминале в OSX или в вашем предпочтительном дистрибутиве Linux, вы можете захотеть немного почитать в другом месте заранее, чтобы получить базовые знания. Если это так, то руководства для Windows и OSX / Linux — хорошее место для начала.

Установка Ruby и Rails в Windows

В Windows проще всего использовать Rails Installer , единый установщик, разработанный Wayne Seguin, который предоставит вам все, что вам нужно. Просто перейдите по ссылке выше и посмотрите видео про Уэйна, и Ruby на вашем компьютере должен быть установлен в кратчайшие сроки.

Установка Ruby и Rails на Mac или Linux

При установке на Linux или Mac вы можете использовать свой дистрибутив по своему выбору: Ruby или, как предпочитают большинство разработчиков Ruby , Ruby Version Manager , также написанный Wayne Seguin. Поскольку оба варианта могут изменяться и относительно специфичны для дистрибутивов, я предлагаю поискать руководства по вашей работе и чтению через сайт RVM.

Другой более поздний вариант, снова предоставленный Уэйном Сегином, — это скрипт bootstrap_rails_environment . Он устанавливает RVM и все зависимости, чтобы Rails работал для пользователей в OSX или Linux.

Для начала вам нужно скачать файл по адресу https://github.com/wayneeseguin/rvm/raw/master/contrib/bootstrap_rails_environment в легко запоминающееся место на вашем компьютере. По умолчанию этот скрипт установит Rails 3.0.3, Ruby 1.8.7 и создаст для вас каталог в ~/Sites . Если вы хотите изменить эти значения, откройте их в своем текстовом редакторе и измените строки, начиная с rails_version , ruby_version и sites_path как вы считаете нужным.

После того, как вы загрузили и отредактировали файл, откройте ваш терминал, перейдите в каталог, в котором вы установили файл, и запустите:

 chmod +x bootstrap_rails_environment ./bootstrap_rails_environment 

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

Генерация вашего первого Rails-приложения

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

Во-первых, откройте свой терминал или командную строку — теперь вам это понадобится очень сильно. Если вы использовали Rails Installer в Windows, убедитесь, что вы используете опцию «Командная строка с Ruby и Rails» в меню «Пуск», чтобы открыть ее. Вы захотите оставить это открытым, пока мы прорабатываем каждый шаг, так как я буду ссылаться на него довольно часто.

Теперь перейдите в каталог, где вы хотите хранить свой код. Если вы использовали скрипт начальной загрузки Rails, то где бы вы ни sites_path для sites_path (по умолчанию ~/Sites ), скорее всего, будет то, что вы хотите; в Windows вы захотите выбрать место (например, c:rails-projects ), которое легко запомнить и на которое можно перейти.

Попав в каталог, используйте команду rails new для генерации нового приложения Rails. Поскольку наше приложение называется «Shorty», чтобы сгенерировать проект Shorty и перейти в него, мы запустим в нашей командной строке следующее:

 rails new shorty cd shorty 

Вы также захотите открыть свой редактор в каталоге кода. Если у вас нет любимого редактора или ваш редактор не полностью поддерживает Ruby, я могу порекомендовать E Text Editor в Windows, TextMate в OSX или Komodo Edit в Linux.

В командной строке снова запустите bundle install . Это говорит bundler, библиотеке, используемой Rails, для выборки и установки всех необходимых библиотек. Пока он работает, воспользуйтесь возможностью просмотреть созданное приложение Rails.

При просмотре структуры кода вы можете заметить, что одно из основных значений Rails — соглашение о конфигурации — приводит к структурированной структуре каталогов для вашего кода. Весь код, связанный с config , config каталог config , код, относящийся к app , попадает в каталог app и так далее. Для получения более подробной информации о структуре смотрите пункт 3.2 официального руководства по началу работы с Rails .

Один из файлов, созданных нашим Rails-приложением, config/database.yml , содержит подробные сведения о подключении к базе данных. Из коробки он использует sqlite3, так как его легко начать. Чтобы создать файл базы данных sqlite3 (и запустить сборку на веб-сервере Rails), вернитесь в командную строку и выполните:

 rake db:create rails server 

Первая строка вызывает задачу «db: create» в rake, инструмент (например, ant, nant или make на других языках), который позволяет вам запускать небольшие кусочки сохраненного кода. В этом случае задача «db: create» создаст нашу базу данных (если вы посмотрите в файл config/database.yml , вы увидите, что он создаст файл в db/development.sqlite3 ).

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

 > Booting WEBrick > Rails 3.0.3 application starting in development on http://0.0.0.0:3000 > Call with -d to detach > Ctrl-C to shutdown server 

Теперь, если вы откроете свой браузер и укажете на http://localhost:3000/ , вы должны увидеть страницу приветствия, подобную этой:

Нажав на ссылку «О среде вашего приложения», вы также увидите список номеров версий для различных библиотек, на которых построен Rails.

Создание вашей первой модели

Теперь, когда у нас есть пустое приложение на Rails, мы можем начать разработку Shorty.

Так как мы создаем сокращение URL, нам нужен какой-то способ хранения записи URL. Для этого мы сгенерируем модель URL с одним указанным полем: url.

Для начала мы будем использовать генераторы Rails для генерации класса и миграции для нас, выполнив в командной строке один раз:

 rails generate model Url url:string 

Это говорит Rails создать класс URL для Модели, создать миграцию, которая сформирует таблицу URL с одним указанным разработчиком полем, URL и соответствующими тестовыми файлами.

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

Затем вы захотите использовать свой текстовый редактор, чтобы открыть файл app/models/urls.rb , содержащий вашу модель URL-адреса и сгенерированный файл миграции (в папке db/migrate он будет автоматически назван с отметкой времени и _create_urls.rb ; например, db/migrate/20110129184226_create_urls.rb ).

Миграция должна выглядеть примерно так:

 class CreateUrls < ActiveRecord::Migration def self.up create_table :urls do |t| t.string :url t.timestamps end end def self.down drop_table :urls end end 

И ваша модель должна выглядеть так:

 class Url < ActiveRecord::Base end 

Редактирование вашей миграции

Миграция сообщает Rails, что, когда она применяется, она должна создать таблицу Urls с полем URL (типа string, обычно переводимого в VARCHAR в большинстве баз данных) и с двумя полями меток времени — created_at и updated_at которые Rails автоматически устанавливает для Вы, как вы создаете и обновляете модели. Аналогично, когда он откатывается, ваша Миграция говорит Rails удалить таблицу Urls.

Единственный аспект, который мы хотим изменить в этой миграции, — это запретить базе данных пустые поля URL. В текстовом редакторе перейдите в файл миграции и измените:

 t.string :url 

в

 t.string :url, :null => false 

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

 rake db:migrate 

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

Редактирование модели

Далее мы захотим отредактировать нашу Модель, чтобы сообщить Rails, что при создании или обновлении URL-адреса всегда должен быть указан URL-адрес. В терминологии Rails мы используем валидации; в частности, мы проверяем наличие поля URL. Для этого мы просто отредактируем наш файл Model (как упоминалось выше), чтобы он выглядел следующим образом:

 class Url < ActiveRecord::Base validates :url, :presence > true end 

Не забудьте сохранить файл. Для получения дополнительной информации о валидаторах (и ActiveRecord в целом) хорошим справочником, как обычно, являются официальные руководства по Rails .

Чтобы проверить это, мы собираемся представить еще один инструмент: консоль Rails. Построенный на IRb (интерактивный Ruby) это то, что называется REPL: цикл чтения-оценки-печати. По сути, это похоже на терминальную сессию специально для тестирования кода Ruby. В нем мы можем ввести код (чтение), и он запустит его (eval), выдав возвращаемое значение (печать).

В командной строке просто введите Rails console в своем терминале; это откроет консоль Rails, используя среду разработки. В качестве простого примера, если вы puts Rails.env в puts Rails.env , консоль должна распечатать «development», сообщая вам, что консоль работает в вашей среде разработки, как и ожидалось.

Чтобы проверить вашу модель, мы сначала инициализируем новый экземпляр URL, набрав:

 u = Url.new 

Это должно показать:

 #<Url id: nil, url: nil, created_at: nil, updated_at: nil> 

Затем попробуйте сохранить его в базе данных, выполнив:

 u.save 

Так как это неверно, консоль выведет false. Это означает, что вызов сохранения не удался, и наш объект не был сохранен в базе данных, поскольку он был недействительным. Чтобы это исправить, у нас есть два варианта. Во-первых, мы можем создать новый URL, передав опцию:

 u = Url.new(:url => "http://google.com/") 

Или, проще, мы можем установить атрибут URL для существующего URL:

 u.url = "http://google.com/" 

Теперь снова запустите u.save и на этот раз он вернет true, сообщая нам, что он был успешно сохранен в базе данных.

Если мы введем pu (метод p просто выведет представление объекта, заданного в качестве аргумента u ), мы должны увидеть:

 #<Url id: 1, url: "http://google.com/", created_at: "2011-01-29 19:07:34", updated_at: "2011-01-29 19:07:34">[ruby] As mentioned before, it was automatically assigned an id, and also set the<code>created_at</code> and <code>updated_at</code> fields to have the correct value: the time it was created. To test finding the record from the database, close the console (either press Ctrl-C or type exit), then reopen the console by typing Rails console and run: [ruby]u = Url.find 1 

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

 u = Url.find 100000 

Там, где нет URL с идентификатором 100000, Rails ActiveRecord::RecordNotFound исключение ActiveRecord::RecordNotFound в Rails, сообщая нам, что он не может найти URL с идентификатором 100000.

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

Перейти к части 2

Кредит с изображением: http://www.flickr.com/photos/jronaldlee/4479381576/