Базы данных

Ruby on Rails 3: Ассоциации между моделями ч. 2

апреля 26, 2012  |  Published in Ruby on Rails, Ruby on Rails 3, Базы данных

ruby on rails tutorial Ассоциации между моделями ч. 1. В этой статьи мы поговорим об интересных параметрах и возможностях ассоциаций моделей.

Псевдонимы

Часто бывает необходимо или желательно использовать отличное от имени модели имя ассоциации. Например у нас есть две модели Store и User и у Store имеется владелец (seller — продавец). store.user выглядит не очень красиво, как буд-то речь идет о пользователе магазина, а не о его владельце (продавце), кроме того, у нас может быть несколько ассоциаций с моделью User, например у нас может быть buyer и seller.
Read the rest of this entry »

Tags: , , ,

Ruby on Rails 3: Создание и настройка рабочего окружения разработчика на Ruby и Ruby on Rails

апреля 21, 2012  |  Published in BDD, Development Processes, RSpec, Ruby, Ruby on Rails, Ruby on Rails 3, Базы данных, Основы, Тестирование

ruby on rails tutorialВ этой статье мы рассмотрим:

  1. Установку Git 
  2. Установку RVM - Ruby Version Manager для возможности работы с несколькими версиями Ruby, а также наборами библиотек Ruby - Gem’ами.
  3. Установку собственно Ruby: Ruby 1.8.7 и Ruby 1.9.3
  4.  Установку SQLite, MySQL, PostgreSQL
  5. Установку фреймворка Ruby on Rails 3.2 и его зависимостей
  6. Установку Node.js как среду выполнения JavaScript
  7. Создание нового проекта Rails
  8. Работу с зависимостями проекта
  9. Настройку тестового окружения и написание простых спецификаций и тестов
  10. Написание кода приложения по спецификациям
  11. Установку Nginx и Unicorn, и запуск приложения Rails на Unicorn и Nginx прокси
  12. Работу с удаленным репозиторием
  13. Работу с Continuous Integration (CI) сервером - Travis

 

Read the rest of this entry »

Tags: , , , , , , , ,

Ruby on Rails 3: Ассоциации между моделями ч. 1

апреля 5, 2012  |  Published in Ruby on Rails, Ruby on Rails 3, Базы данных

ruby on rails tutorial Ассоциации между моделями ч. 2. Экземпляры моделей представляют собой сущности реального мира, а ассоциации между ними являются ни чем иным как отношениями этих сущностей между собой.

ActiveRecord предоставляет несколько возможных ассоциаций (типов отношений) между моделями и все они представлены ниже.

 belongs_to — принадлежность другой модели. Пример:

 

class Post < ActiveRecord::Base
  belongs_to :category
end

Read the rest of this entry »

Tags: , , ,

Установка PostgreSQL 9.1 на Ubuntu Linux

марта 27, 2012  |  Published in PostgreSQL, Базы данных

postgresql_logo1. Открываем консоль и вбиваем  команду инсталяции:

$ sudo apt-get install postgresql-9.1 postgresql-server-dev-9.1

2. После того, как установка завершилась устанавливаем драйвер для Ruby:

$ gem install pg
Successfully installed pg-0.13.2

3. Пробуем запустить консоль PostgreSQL:

$ psql
psql: FATAL: role «vladimir» does not exist
$ sudo psql
psql: FATAL: role «root» does not exist Read the rest of this entry »

Tags: , , ,

Ruby on Rails 3: Основы работы с ActiveRecord моделью

февраля 10, 2012  |  Published in Ruby on Rails, Ruby on Rails 3, Базы данных

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

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

Модель — это составляющая часть архитектурного паттерна MVC, которая хранит бизнес логику. В вашем приложении все модели должны храниться в директории app/models в отдельных файлах, имена которых должны соответствовать имени модели, например: Post -> post.rb, InvoiceProduct -> invoice_product.rb.

Как связаны модель и таблица?
В большинстве случаев модель ассоциируется с определенной таблицей в базе данных, например модель Post будет ассоциироваться с таблицей posts. Экземпляр модели являет собой объект представляющий одну запись из таблицы, а сама модель (класс) используется для работы со всей таблицей, например для поиска всех записей соответствующих некоторому условию.

Обратите внимание на то, как называется модель и как называется соответствующая ей таблица. Имя модели — всегда в едином числе, а имя таблицы во множественном.

Как создать модель?
Создать модель можно вручную, но лично я предпочитаю использовать генератор моделей:

$ rails g model Product name:string description:text price:integer
      invoke  active_record
      create    db/migrate/20120210115708_create_products.rb
      create    app/models/product.rb
      invoke    test_unit
      create      test/unit/product_test.rb
      create      test/fixtures/products.yml

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

Генератор модели мне кажется более удобным потому, что одной командой я создаю сразу все необходимые для работы файлы: собственно модель, миграцию для создания соответствующей модели таблицы в БД, файл фикстур и болванку для написания тестов.
Read the rest of this entry »

Tags: , , , , , , ,

Работа с MongoDB: Подробнее о языке запросов ч.1

декабря 28, 2011  |  Published in MongoDB, Базы данных

mongoDBВ этой статье мы подробнее рассмотрим ранее описанные метод .find() и объекта запроса.

Методы .find() и .findOne() используются соответственно для поиска всех документов и поиска первого документа, что соответствуют запросу.

 


db.posts.find()
/*
{ "_id" : ObjectId("4ef64c526e06ee4cec3dab4e"), "title" : "Title for post # 1", "content" : "Content for post # 1" }
{ "_id" : ObjectId("4ef64c526e06ee4cec3dab4f"), "title" : "Title for post # 2", "content" : "Content for post # 2" }
...
{ "_id" : ObjectId("4ef714746dca6d809b6f4cdd"), "title" : "Title #9", "content" : "Content #9" }
{ "_id" : ObjectId("4ef714746dca6d809b6f4cde"), "title" : "Title #10", "content" : "Content #10" }
*/

db.posts.find().count() //20

Read the rest of this entry »

Tags: , ,

Работа с MongoDB: Структура БД и основы языка запросов

декабря 25, 2011  |  Published in MongoDB, Базы данных

mongoDBРаботая с MongoDB у нас имеется базовый объект — db, который представляет собой саму базу данных, точнее является ссылкой на одну из имеющихся баз данных (по умолчанию, запуская консоль это база данных с именем test). Далелее идут коллекции документов, использую dot-нотацию получаем доступ к коллекции следующим образом:

> db.collection_name

Коллекции представляют собой наборы документов или вложенных коллекций. Обратиться к документу можно используя различные запросы.
Read the rest of this entry »

Tags: , , ,

Работа с MongoDB: Установка и краткое введение в работу с MongoDB

декабря 24, 2011  |  Published in MongoDB, Базы данных

mongoDBMongoDB — это документо-ориентированная база данных. Если в реляционных базах данных мы используем строки (записи) и таблицы, то для MongoDB можно провести параллель с документами и коллекциями.

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

MongoDB — очень популярное и достаточно стабильное решение, которое широко используется в production окружении там, где нужна высокая производительность и где не подходят или плохо подходят реляционные базы данных.

Read the rest of this entry »

Tags: ,

SQL-паттерн в Rails

июня 30, 2011  |  Published in Ruby on Rails, Ruby on Rails 3, Базы данных

Ruby on Rails 3ActiveRecord — просто замечательный инструмент для простых запросов. Тем не менее иногда во имя производительности приходится отказаться от всех преимуществ предоставляемых ActiveRecord и снизойти до использования SQL.

Рассмотрим пример. У вас имеются пользователи и проекты. Пользователи могут принадлежать многим проектам через объединенную таблицу memberships. Какой наш виигрыш? Все пользователи, которые не связаны с проектами. Схема таблицы:


create_table :users, :force => true do |t|
end

create_table :memberships, :force => true do |t|
  t.integer :user_id
  t.integer :project_id
end

create_table :project, :force => true do |t|
end

Read the rest of this entry »

Обратимые миграции в Rails 3.1

мая 10, 2011  |  Published in Ruby on Rails, Ruby on Rails 3, Базы данных

Миграции всегда были одной из основных «фишек» Ruby on Rails. В Rails 3.1 миграции приобретают еще один козырь, который упрощает процесс поддержки логики в up и down методах миграции. Если вам нужно немного восстановить свои знания о миграциях, я рекомендую прочитать официальный Rails Guide.

Давайте начнем с разбора примера миграции из Rails 3.0:

#db/migrate/20110505090317_create_posts.rb
class CreatePosts < ActiveRecord::Migration
  def self.up
    create_table :posts do |t|
      t.string :title
      t.text :body

      t.timestamps
    end
  end

  def self.down
    drop_table :posts
  end
end

Эта миграция создает в базе данных таблицу posts с двумя полями — title и body тип хранимых данных в которых соответственно string и text. Хэлпер timestamps создает поля типа datetime — created_at и updated_at. Для отката этой миграции нам просто необходимо удалить таблицу posts. Метод .down как раз и занимается откатом миграции — удалением таблицы posts. Когда Rails использует миграцию, миграция запускает метод .up. Для отката миграции (которая выполняется командой rake db:rollback) миграция выполняет метод .down.

Глядя на эту миграцию возникают два вопроса:

- Почему именно методы класса, вместо методов экземпляра класса?
- Для простых случаев почему бы не объявить только метод выполнения миграции и защитить миграцию от отката?

Замечательный человек Аарон Петерсон думает так же и решил упросить миграции.
Read the rest of this entry »

Tags: , ,