ActiveRecord в Rails 3.1 будет снабжен Identity Map

апреля 23, 2011  |  Published in Ruby on Rails, Ruby on Rails 3

Если вы являетесь разработчиком на платформе Rails, то вы, должно быть, знакомы с кэшированием запросов в Active Record. Кэширование запросов — очень полезная составляющая Active Record, которая сокращает ненужные SQL запросы и предоставляет значительное увеличение производительности, особенно при обращении к ассоциациям. Поблема с кэшированием запросов, однако, возникает тогда, когда при получении двух идентичных записей из базы данных, мы получаем два объекта в оперативной памяти.

user1 = User.find(1) # => #<User id: 1, name: "Josh">
user2 = User.find(1) # => #<User id: 1, name: "Josh">

user1 == user2 # => true, b/c AR::Base recognizes that
# они имеют одинаковый первичный ключ

user1.object_id == user2.object_id # => false, b/c these are two
# но являются двумя разными объектами

Read the rest of this entry »

Tags: ,

RDR3T > Ассоциации и отношения между моделями. Валидация.

апреля 14, 2011  |  Published in Ruby on Rails, Ruby on Rails 3

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

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

Поскольку любая публикация в блоге должна публиковаться от имени определенного пользователя, то нам необходимо определить связь (ассоциацию) между двумя моделями. Поскольку пользователь может иметь несколько публикаций, а публикация только одного автора, то нам следует установить отношение между моделями: User имеет много Post‘ов. Но прежде, давайте создадим модель и контроллер для работы с постами, а для этого создадим специальную ветку в нашем проекте и будем работать в ней:

$ git branch posts

Теперь если вы воспользуетесь командой, то увидите следущий ответ:

$ git branch
* master
posts

Звездочкой отмечена текущая ветка, для переключения на ветку posts следует воспользоваться командой:

$ git checkout posts
Switched to branch ‘posts’

Вы также могли бы создать ветку сразу из git checkout:

$ git checkout -b posts

Теперь, когда ветка posts создана и мы на нее переключились, мы можем заняться разработкой модели, контролера и представлений поста. В прошлой статье я обещал рассказать вам как создавать модели, контроллеры и другие компоненты приложения при помощи других встроенных в Rails генераторов, кроме scaffold. Сразу скажу, что в данной статье мы будем использовать стандартный генератор scaffold так как код генерируемый им нам весьма подходит, хотя код контроллера мы слегка упростим, чтобы он был идентичен коду из контроллера UsersController.

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

rails g controller Posts
rails g model Post title:string text:text user_id:integer
rails g migration create_posts
Read the rest of this entry »

Tags: , ,

RDR3T > Первая кровь: Структура приложения, первая модель и контроллер

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

В прошлой главе мы занимались тем, что создавали себе рабочую среду и создали свое первое приложение на Rails 3. В этой главе RubyDev Rails 3 Tutorial вы еще ближе познакомитесь со структурой приложения Rails, с Git и Bundler, а также создадите свою первую модель и контроллер и узнаете о том, что такое BDD и RSpec.

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

CoC (Convention over Configuration — Соглашение прежде конфигурации) — согласно этому принципу Rails содержит набор соглашений касательно структуры проекта, именования файлов и директорий, а также классов, модулей и так далее. Благодаря этому приложение на Rails избавляется от лишней настройки приложения, чем гораздо ускоряет разработку. Этот принцип вовсе не значит, что приложение на Rails не настраиваемо, Rails как раз таки один из самых гибких фреймворков для веб разработки. Этот принцип означает лишь, то, что мы избегаем лишней конфигурации и приближаемся к стандартизации.
Read the rest of this entry »

Tags: , , , , , , ,

Rails 3 Tutorial: Модели: Простая выборка данных

февраля 20, 2011  |  Published in Ruby on Rails, Ruby on Rails 3

Ruby on Rails 3Прежде чем начачать, нам необходимо создать модель, таблицу и записи в таблице. Как это сделать читайте в статье Rails Tutorial: Модели: Введение. Итак, нам необхобима модель Person (id: integer, name: string, last_name: string, age: integer, sex: string, created_at: datetime, updated_at: datetime).

В этой статье мы рассмотрим следущие простейшие методы выборки или поиска данных:

.all
.first
.last
.find
.where
.order
.limit

… а также обслуживаемые с помощью method_missing методы:

find_by_
find_by_*_and_*
find_all_by_
find_all_by_*_and_* Read the rest of this entry »

Tags: , , ,

Rails 3 Tutorial: Модели: Введение

февраля 19, 2011  |  Published in Ruby on Rails, Ruby on Rails 3

Ruby on Rails 3По многочисленным просьбам в количестве 9 штук, начинаю рубрику  на RubyDev — Rails 3 Tutorial в которой я пройдусь по всем составляющим фреймворка Rails, а затем пойдут более практичные и подробные статьи, например о деплое, о внутреннем устройстве Ruby on Rails и т.д.. Учебник не будет самодостаточным, часто на страницах учебника я буду ссылаться на самостоятельные статьи. Ах да, еще статьи будут публиковаться в не  правильном порядке, статьи размещенные в правильной последовательности вы найдете на специальной странице, которую я создам, когда их наберется несколько штук.

Существует такой шаблон / подход к разработке приложений, как MVC, который состоит в том, что приложение разбивается на 3 части: Model, View и Controller, каждая из которых выполняет свою определенную роль. В этой статье я не буду рассказывать о том, что такое MVC, просто скажу, что такой подход к разработке хорош тем, что при внисении изменений в одну часть приложения, программисту, по идее, не нужно переписывать все приложени.

Model — модель, это та часть приложения, которая отвечает за работу с данными. В Rails модель реализована в виде ActiveRecord, однако, благодаря модульности привнесенной в Rails из Merb, вы можете использовать другие средства работы с базой данных, например DataMapper или Sequel. В данном цыкле статей речь будет идти лишь о ActiveRecord, однако, в будущем, возможно, будут опубликованы статьи по работе с DataMapper и Sequel.
Read the rest of this entry »

Tags: , , ,