Базы данных

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

Mongoid #2: Документы

марта 16, 2011  |  Published in Базы данных

mongoid logoДанная статья является переводом официальной документации: Mongoid’s Documents

Документы — основные объекты в Mongoid и любой объект, который сохраняется в базу данных должен включать в себя через include Mongoid::Document. Представлением документа в MongoDB является BSON-объект, который очень похож на хэш в Ruby или объект формата JSON. Документы могут храниться в своих собственных коллекциях в базе данных или могут быть включены в другие документы таким образом имея некую степень вложенности.

Объявление документов в Mongoid

Рассмотрим простой класс — модель человека. У каждого человека должны быть имя, фамилия и отчество. Мы можем объявить эти атрибуты человека объявив соответствующие поля (поле — field) в объекте представляющем человека. В Mongoid поля, по умолчанию, имеют тип String.

#person.rb
class Person
  include Mongoid::Document
  field :first_name
  field :middle_initial
  field :last_name
end

Read the rest of this entry »

Tags: , ,

Mongoid #1: Установка

марта 1, 2011  |  Published in Базы данных

mongoid logoДанная статья является переводом официальной документации: Mongoid Installation

Для работы с MongoDB, из Ruby, необходимо установить gem Mongoid:

$ gem install mongoid —pre

Для исправления производительности, вы должно быть захотите установить расширения для Mongo написанные на Си, которые совместимы с вашей системой:

$ gem install bson_ext

Read the rest of this entry »

Tags: , , ,

Мелкопост о MongoDB и Mongoid

марта 1, 2011  |  Published in Базы данных, Новости

mongoDBДобрый день, уважаемые читатели блога! Пишу сей пост с радостью, поскольку появился повод разобраться наконец-то с тем, что такое документо-ориентированные базы данных и с чем их едят. А это означает, что на RubyDev будет новый цикл статей, в первую очередь переводов официальной документации по MongoDB — документо-ориентированной базе данных, и Mongoid — библиотеке для работы с MongoDB в Ruby. В первую очередь начну с перевода документации по Mongoid, а дальше пойдет перевод документации по самой MongoDB и различных статей на тему.

Что же такое документо-ориентированные базы данных? В первую очередь хочу сказать, что пока я сам не очень разобрался, поэтому буду благодарен на правки в комментариях. Документо-ориентированные БД — это в первую очередь NoSQL базы данных. Во-вторых, документо-ориентированные базы данных, как видно из названия ориентируются на такие структуры данных, как «документ», в отличие от таблиц, которые используются в реляционных БД типа MySQL или PostgreSQL.

Что такое документ? - Документ, это грубо говоря венегрет из различных данных, ну или, техническим языком говоря, документ можно назвать многомерным ассоциативным массивом. В MongoDB для хранения данных используется формат BSON — бинарный эквивалент формата JSON.

Как установить MongoDB?
Установка предельно проста, идем сюда: http://www.mongodb.org/downloads, скачиваем подходящую стабильную версию и просто распаковываем содержимое в любую необходимую нам папку.

Чтобы запустить сервер MongoDB, необходимо запустить файл mongod:

$ ./mongod —dbpath data/db

Где параметр —dbpath указывает путь, где хранится база данных. По умолчанию MongoDB, хранит файлы в папке data/db, которую вам необходимо создать самостоятельно и правильно выставить права доступа, однако у меня что-то не завелось и мне приходиться каждый раз указывать папку с БД вручную.

Все, теперь вы имеете MongoDB на борту! Ждите в ближайшее время перевода официальной документации по Mongoid.

Tags: ,

Установка базы данных SQLite 3 на Windows и Ubuntu

октября 3, 2010  |  Published in Help, Базы данных

sqlite3 sqlite 3Часто на форумах вижу вопросы связанные с установкой БД SQLite3 на Windows, по этому и решил написать данную How To — статью.

Установка базы данных SQLite 3 на Windows

1. Скачиваем с оффициального сайта sqlite-3_7_2.zip и sqlitedll-3_7_2.zip либо более свежие версии (на момент написания поста актуальная версия — 3.7.2).

2. Распаковываем содержимое обеих архивов в папку WINDOWS/system32. В архивах содержится всего 3 файла:

sqlite3.exe  sqlite3.def  sqlite3.dll

3. Теперь SQLite 3 установлена в нашей системе, но для того, чтобы мы могли ее использовать в наших проектах на Ruby on Rails, нам следует установить Ruby-интерфейс для работы с SQLite 3, который поставляется в виде gem’а — sqlite3-ruby:

gem install sqlite3-ruby

Установка SQLite 3 на Ubuntu Linux

1. Устанавливаем пакеты sqlite3 и libsqlite3-dev:

sudo apt-get install sqlite3 libsqlite3-dev

2. Устанавливаем gem sqlite3-ruby:

sudo apt-get install sqlite3-ruby

Все! теперь мы можем работать с базой данных SQLte 3.

Tags: ,