Правильная работа с ActiveRecord

июля 21, 2012  |  Published in Model, Ruby on Rails, Ruby on Rails 3

Статья будет иметь несколько хаотичной. В ней я приведу несколько примеров того, что я считаю неправильной работой с ActiveRecord. Что-то в статье — истина последней инстанции, а что-то — субъективное и, возможно, ошибочное мнение автора. Статья ориентирована на тех, кто хоть немного знаком с Ruby on Rails.

Очень популярная ошибка — не использование limit(1) для выборки одиночной записи с использованием where и других методов Quering API. Суть ошибки в том, что Rails не может за вас подумать о том, что вам необходима одна единственная запись, а не все удовлетворяющие условию. В случае, когда вы не используете limit(1) будет выполняться поиск по всей таблице, а не только до первой соответствующей условию записи.

Word.where(word: 'cat')
# Word Load (0.9ms) SELECT "words".* FROM "words" WHERE "words"."word" = 'cat'
# => [records]

Word.where(word: 'cat').limit(1)
# Word Load (0.7ms) SELECT "words".* FROM "words" WHERE "words"."word" = 'cat' LIMIT 1
# => [record]

UPD Вообще не пользуйтесь .limit(1), вместо .limit(1) используйте first, если вам действительно необходим лишь один элемент. Дело в том, что limit(1) возвращает массив с одним единственным элементом, чтобы получить этот элемент нам необходимо вызывать еще один метод — first (Array#first), или обращаться к элементу через индекс — Model.limit(1)[0].

Tag.limit(1).first
# Tag Load (1.6ms)  SELECT "tags".* FROM "tags" LIMIT 1

Tag.first
# Tag Load (0.8ms)  SELECT "tags".* FROM "tags" LIMIT 1

Read the rest of this entry »

Tags: , , ,

Interview with Ernie Miller, creator of great gems like Squeel, Valium and etc.

июля 17, 2012  |  Published in Интервью

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

Today in our virtual studio we welcome a super guest. His name is , hi is an extremely productive programmer, Rails contributor, and maintainer of very useful projects such as MetaWhere, Squeel, Valium, etc.

Ernie MillerHi Ernie, please introduce yourself for RubyDev readers.

Hi Vladimir, thanks for the opportunity to “visit” with you. I’ve been a developer with for a bit over a month now, and I’ve been loving it. As for hobbies, I enjoy recreational coding, PC and console gaming (currently spending quality time with Diablo 3), reading, and spending time with my wife and stepdaughter. I also volunteer as a crisis counselor at my church.

 

Ernie, I want to thank you for your projects. I like MetaWhere and Valium and I have started to use Squeel in my new project. And all these three gems (or ActiveRecord extensions) are awesome and I recommend to all Rails developers to use these tools. Can you briefly describe these gems developed by you?

Sure.

and are very similar. They’re both attempts to expose more of the ARel awesomeness that underpins ActiveRecord 3.x to the developer. At its simplest, this means you can do more than equality and inclusion conditions in your where clauses without resorting to SQL snippets in strings. The primary difference between MetaWhere and its successor, Squeel, is that Squeel has an improved DSL, additional functionality, and cleaner internals. These gems really wouldn’t have been possible if it weren’t for the awesome work on ARel by Nick Kallen, Bryan Helmkamp, Emilio Tagua and of course, Aaron Patterson. Emilio and Aaron were always especially encouraging and helpful as I first began using, then contributing to ARel.

is much smaller, and much simpler. It’s just a gem that allows for improved performance when selecting only a few attributes from your AR models, because it avoids the overhead of instantiating ActiveRecord::Base objects for each returned row. The functionality is similar to “pluck” which has been added to Rails core more recently, though I think Valium is better. :D

Read the rest of this entry »

Tags: , , , ,

routing_concerns или будущее маршрутизации в Ruby on Rails 4.0

июля 3, 2012  |  Published in Ruby on Rails, Ruby on Rails 3

spaghetti codeВсего 5 дней назад DHH добавил новый репозиторий организации Rails на Github. представляет собой расширение Rails проверенное на работоспособность только с Rails 3.2 и предназначенное для выDRYивания кода маршрутизации.

Принцип работы плагина простой, вы объявляете concern’ы, а в них помещаете код общий для нескольких ресурсов.
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: , , , , , , ,

Ruby on Rails 2.3.9 — последняя ступень на пути к Rails 3.0

сентября 6, 2010  |  Published in Ruby on Rails, Новости

4 сентября, не задолго после релиза Ruby on Rails 3, вышла последняя версия из ветки 2.3.х — 2.3.9, о чем было сообщено в официальном блоге Ruby on Rails:

«Мы выпустили новый релиз Ruby on Rails 2.3.9, который приближает вас на несколько шагов ближе к Ruby on Rails 3 и Ruby 1.9. Если ваше приложение работает на  Ruby on Rails 2.3.9, без каких либо ошибок и предупреждений о том, что вы используете устаревшие методы, то вы хорошо подготовлены к переходу на Ruby on Rails 3.

Что следует поправить:

Изменен в i18n синтаксис интерполяции, вместо старого Hello {{name}} , следует использовать родную для Ruby 1.9 конструкцию: Hello %{name}.

Произошла замена Object#tap на Kernel#returning, который родной для Ruby 1.8.7.

Переименован метод Array#random_element на Array#sample, который родной для Ruby 1.9.

Переименованы config.load_paths и .load_once_paths на более точно описывающие суть: config.autoload_paths и .autoload_once_paths.

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


Вперед к Ruby on Rails 3.1!
»

Кстати! Поздравляю всех Рельсовиков с выходом  29 августа релиза Ruby on Rails 3, которого все с нетерпением ждали!

Tags:

Ruby Version Manager: приручаем gemset или Установка нескольких версий Rails

июля 12, 2010  |  Published in Ruby, Ruby Gems, Ruby on Rails

Как и обещал, еще одна статья об RVM.

rvm's gemset is gold!Одной из самых мощных и полезных вещей в RVM являются наборы gem’ов — gemsets. Gemset представляет собой отдельную директорию для gem’ов, таким образом, что не возникает конфликта между одноименными gem’ами в разных gemset’ах. Gemset’ы, или наборы gem’ов, предоставляют на удивление полезную возможность использовать сразу несколько версий одного и того же расширения Ruby, например использовать несколько версий Rails. Так же с их помощью вы можете проверить как хорошо работает ваше приложение при различных конфигурациях gem’ов.

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

Tags: , , , ,

Устанавливаем Ruby 1.8.7 и Ruby on Rails

июня 26, 2010  |  Published in Ruby, Ruby Gems, Ruby on Rails, Основы

railsЯ решил описать установку Ruby, RubyGems и Ruby on Rails отдельной статьей. Знаю, немножко запоздало, ведь блог ориентирован главным образом на новичков и следовало бы начать со статьи описывающей инсталляцию, но…

Установка Ruby

Прежде, чем вы сможете создать свое первое приложение на Rails, вам необходимо установить на свой компьютер Ruby, RubyGems и собственно Rails.
Read the rest of this entry »

Tags: , ,

Начинаем знакомится с Ruby on Rails

июня 26, 2010  |  Published in Ruby on Rails

Данная статья является частью Учебника Rails и вместе с тем первой частью перевода первой статьи из оффициальной документации (гайда  Rails) по Rails3 с сайта RailsGuides — статьи .

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

Ruby on Rails — поистине один из самых мощных фреймворков для разработки веб приложений. Факт превосходства над любым другим фреймворком в плане скорости разработки не оспорим, с этим соглашаются даже заядлые враги Рубистов — Пайтониты =)

Ценой такого могущества и упрощения/ускорения разработки является производительность. Дело в том, что сайты, созданные на Rails уступают в скорости работы сайтам на других менее развитых Ruby-фреймворках, не говоря уже о Python и PHP — фреймворках. Что ж, язык Ruby сам по себе ориентирован не на высокую производительность в плане скорости работы, а на высокую производительность в плане написания кода. Read the rest of this entry »

Tags: ,