Доброго времени суток, дорогой читатель. Ты наверное знаком с популярным web-framework Ruby on Rails. Если нет, то в этом посте ты сможешь найти много интересной и познавательной информации. Одно из его правил – «Одна модель – одна таблица». Следуя ему модель Cat должна брать информацию из таблицы cats, если не указано другое имя. А если наша модель состоит из нескольких, допустим шести, таблиц? Стандартный joins/include методы activerecord тут уже не в помощь.
0.4
Рейтинг
Ruby on Rails *
Фреймворк, написанный на Ruby
Сначала показывать
Порог рейтинга
Уровень сложности
Встраиваемые движки пользовательских блогов для Ruby on Rails
3 мин
3.2KИногда мне кажется, что в экосистеме Ruby on Rails есть проклятое место: встраиваемые движки для ведения блогов. Это особенно мило наблюдать в свете существования бесконечного количества скринкастов «блог на Rails за 10 минут».
Судя по всему, любая попытка создать какое-либо решение для блогов в виде подключаемого модуля приводит, как правило, к одному из двух исходов: либо человека утомляет эта работа и он уходит заниматься более насущными вещами, либо движок превращается в монстра, способного сожрать любое Rails-приложение ещё до момента его инициализации.
Некоторое время назад, когда я работал в «АБАК-ПРЕСС», руководство повелело внести в милый сайтик LookMart.ru весьма модную нынче «фишечку» — пользовательские блоги (на данный момент эта функциональность находится в активной разработке). Меньше всего нам хотелось изобретать велосипед и городить очевидные вагоны из контроллеров с моделями, но после небольшой разведки пришлось смириться и сделать всё самостоятельно. Почему?
Судя по всему, любая попытка создать какое-либо решение для блогов в виде подключаемого модуля приводит, как правило, к одному из двух исходов: либо человека утомляет эта работа и он уходит заниматься более насущными вещами, либо движок превращается в монстра, способного сожрать любое Rails-приложение ещё до момента его инициализации.
Некоторое время назад, когда я работал в «АБАК-ПРЕСС», руководство повелело внести в милый сайтик LookMart.ru весьма модную нынче «фишечку» — пользовательские блоги (на данный момент эта функциональность находится в активной разработке). Меньше всего нам хотелось изобретать велосипед и городить очевидные вагоны из контроллеров с моделями, но после небольшой разведки пришлось смириться и сделать всё самостоятельно. Почему?
+16
Лучший способ изучить Rails
5 мин
200KДоброго времени суток!
Когда-то я хотел познакомиться с Rails поближе, но не знал с чего начать, пока мне на глаза не попалась эта статья. Далее вы увидите перевод, смешанный с собственным опытом и свойственными мне лексическими и фразеологическими оборотами. Итак, поехали.
У меня за спиной огромный опыт работы с PHP, но сейчас я работаю Rails разработчиком. Огромную сложность для большинства людей, которые пытаются освоить что-то новое — это сам процесс обучения. Когда вы владеете каким-либо языком или фреймворком и знаете его вдоль и поперёк, переход на что-то новое не представляется необходимым.
Однако, изучение Ruby on Rails является достаточно простым занятием. Это невероятно мощный фреймворк, который имеет огромное сообщество, продвигающее его вперёд. Итак, у нас возникает вопрос: какой способ изучить Rails является лучшим? Вот он — план занятий.
Предисловие
Когда-то я хотел познакомиться с Rails поближе, но не знал с чего начать, пока мне на глаза не попалась эта статья. Далее вы увидите перевод, смешанный с собственным опытом и свойственными мне лексическими и фразеологическими оборотами. Итак, поехали.
Введение
У меня за спиной огромный опыт работы с PHP, но сейчас я работаю Rails разработчиком. Огромную сложность для большинства людей, которые пытаются освоить что-то новое — это сам процесс обучения. Когда вы владеете каким-либо языком или фреймворком и знаете его вдоль и поперёк, переход на что-то новое не представляется необходимым.
Однако, изучение Ruby on Rails является достаточно простым занятием. Это невероятно мощный фреймворк, который имеет огромное сообщество, продвигающее его вперёд. Итак, у нас возникает вопрос: какой способ изучить Rails является лучшим? Вот он — план занятий.
+55
gem the_sortable_tree
3 мин
3.2KTheSortableTree — гем, реализующий функционал Drag&Drop для деревьев построенных на основе гемов awesome_nested_set или nested_set.
В 2008 году, когда мы делали свою первую социалку на рельсах, я впервые столкнулся гемом better_nested_set. Гем был прекрасен (я имею ввиду по сути, не по коду, реализация тогда еще хромала) и, пожалуй, одного только его было достаточно, что бы убедить меня забыть программирование на PHP, как страшный сон.
Мы использовали гем для формирования многоуровневого дерева комментариев. Но было одно но… В тот момент не было ни одного хелпера, который бы позволял отрисовывать эти деревья. Из-за этого приходилось выдумывать свои велосипеды. Свой велосипед сделал и я.
Нет, я не склонен драматизировать и усложнять процесс реализации. У каждого из нас свои предпочтения. Поэтому я сделал самую обычную рекурсию, которая отрисовывает дерево с помощью паршелов.
Да, меня критиковали — это медленно отрисовывается, это не сработает на дереве из 10 000 элементов, надо по-другому и вообще…
Однако с 2008 года я так и не увидел чего-то другого, более доступного, быстрого и простого. Возможно, я плохо искал.
И вот я, потупив взор и нервно теребя в руках носовой платочек, представляю вам реинкарнацию моего хелпера в виде гема основанного на Rails Engines.
Уверен, для отрисовки небольших деревьев (до 100 элементов) и создания небольших CMS, где хочется управлять деревом простым перетаскиванием, мой хелпер подойдет идеально.
https://github.com/the-teacher/the_sortable_tree
В 2008 году, когда мы делали свою первую социалку на рельсах, я впервые столкнулся гемом better_nested_set. Гем был прекрасен (я имею ввиду по сути, не по коду, реализация тогда еще хромала) и, пожалуй, одного только его было достаточно, что бы убедить меня забыть программирование на PHP, как страшный сон.
Мы использовали гем для формирования многоуровневого дерева комментариев. Но было одно но… В тот момент не было ни одного хелпера, который бы позволял отрисовывать эти деревья. Из-за этого приходилось выдумывать свои велосипеды. Свой велосипед сделал и я.
Нет, я не склонен драматизировать и усложнять процесс реализации. У каждого из нас свои предпочтения. Поэтому я сделал самую обычную рекурсию, которая отрисовывает дерево с помощью паршелов.
Да, меня критиковали — это медленно отрисовывается, это не сработает на дереве из 10 000 элементов, надо по-другому и вообще…
Однако с 2008 года я так и не увидел чего-то другого, более доступного, быстрого и простого. Возможно, я плохо искал.
И вот я, потупив взор и нервно теребя в руках носовой платочек, представляю вам реинкарнацию моего хелпера в виде гема основанного на Rails Engines.
Уверен, для отрисовки небольших деревьев (до 100 элементов) и создания небольших CMS, где хочется управлять деревом простым перетаскиванием, мой хелпер подойдет идеально.
https://github.com/the-teacher/the_sortable_tree
+23
Истории
ActiveRecord и мистически падающие спеки
2 мин
1.3KСегодня, занимаясь разработкой одного Ruby on Rails проекта обнаружил странную особенность: падают две spec-и. Ни у кого в проекте не падают, а у меня — падают. Код, gem-ы, система и софт один и тот же, только у меня спеки падают, а у других участников проекта — нет.
+5
5 гемов на все случаи жизни
3 мин
9.3KВ блоге про Django я периодически вижу посты с обзорами интересных расширений для этого фреймворка. Идея мне понравилась, и я решил, что было бы неплохо сделать похожий цикл заметок и о Ruby on Rails.
За последние 9 месяцев работы с RoR у меня накопился небольшой список гемов, которые существенно упрощают жизнь разработчику, и которые я бы мог посоветовать для решения тех или иных задач. В этой статье я хочу рассказать о пяти из них.
За последние 9 месяцев работы с RoR у меня накопился небольшой список гемов, которые существенно упрощают жизнь разработчику, и которые я бы мог посоветовать для решения тех или иных задач. В этой статье я хочу рассказать о пяти из них.
+39
Ruby on rails в массы: webvybory2012.ru выдают стандартную страницу ошибок development окружения Rails
1 мин
2.7KНаткнулся в новостях на до боли знакомую картинку
Не мог не поделиться. А вообще, я смотрю, у них там всё как у больших мальчиков: mysql2, capistrano, может даже и Rails 3.1 используется. Жаль только развернули development окружение в production.
Cайт для мониторинга выборов обвалился при запуске
При попытке доступа на сайт webvybory2012.ru посетители получают ошибку 502 или сообщение о невозможности подключения к базе данных. В то же время другие пользователи уже могут попасть на новую версию портала. Раньше он использовался для обсуждения технических нюансов организации трансляции.
Не мог не поделиться. А вообще, я смотрю, у них там всё как у больших мальчиков: mysql2, capistrano, может даже и Rails 3.1 используется. Жаль только развернули development окружение в production.
+1
+4
Locum + Capistrano + git на Windows: маленькое приключение с размещением
3 мин
3.7KЭту маленькую заметку я постаю, видимо, больше для себя. Сегодня у меня был первый опыт выгрузки приложения RoR на хостинг Locum с использованием связки Capistrano и git на Windows 7. Пришлось помучаться — первый блин чуть не встал комом.
+8
Иерархия контроллеров
3 мин
12KВ большинстве встречавшихся мне rails проектов, структура контроллеров не имеет никакой организации и проект растет как придется. В больших проектах это приводит к тому что контроллеры становятся огромными (с десятками actions), а условные фильтры растягиваются на весь экран. Разобраться в таком коде бывает очень не просто.
Поработав с большим количеством rails проектов, у меня был сформирован подход к организации иерархии контроллеров, которая позволила унифицировать их структуру и упростить код.
Поработав с большим количеством rails проектов, у меня был сформирован подход к организации иерархии контроллеров, которая позволила унифицировать их структуру и упростить код.
+35
Ruby on Rails на Windows с тестами производительности
11 мин
16K«Залог дружбы — это разность индивидуальностей» Юлиан Семенов.Все больше и больше Windows-разработчики интересуются Ruby — динамическим высокоуровневым языком программирования. Не малую роль здесь сыграл фреймворк для создания веб-приолжений Ruby on Rails. Разработка на «рельсах» проста и увлекательна. Благодаря высокой динамике Ruby разработчику открываются множество вспомогательных средств, при сравнительно малом количестве кода вы получаете богатый функционал.
Эта статья хорошо подойдет для начинающих веб-программистов и тех кто задумывается начать работать с Ruby on Rails. В ней будут рассмотрены такие вопросы:
- установка рабочего окружения;
- написание простого приложения;
- развертывание приложения на сервере.
+15
Ruby on Rails уже на 3.2, следующая станция 4.0.0.beta
1 мин
3.7K Не покладая рук команда разработчиков Ruby on Rails прокладывает железнодорожный путь к следующим версиям, радуя нас все новыми и новыми плюшками. И вот на днях, Девид (который Heinemeier Hansson) сообщил в блоге новость об очередном обновлении Rails до версии 3.2 RC1, заодно подметив, что версия 3.2 будет последней в третьей ветке и на подходе 4.0.0.beta.
+23
MongodbLogger — складываем логи вашего Rails 3 приложения в MongoDB
2 мин
2.8KПривет всем. Сегодня я поведаю о своей разработке для Rails 3 — MongodbLogger. Начнем по порядку.
Rails приложение по-умолчанию складывает логи запросов в папку logs. Сами по себе логи очень удобная штука — они помогают посмотреть какие запросы идут в ваше приложение, посмотреть trace ошибки и прочее. В них можно дописывать дополнительную информацию. Хотя файловый лог прост и эффективен, но у него есть определенные ограничения: при использовании множество веб-серверова, лог у каждого свой; нет простого доступа. Запись в РСУБД решает вопросы централизации и простого доступа логов, но сразу возникают другие проблемы: схема таблицы не настолько гибка, как может быть структура лога; запись может быть недостаточно быстра; чистка старых логов — задачи на Ваших плечах. И тут на помощь приходит MongoDB.
+39
Ближайшие события
Firebird Conf: конференция для разработчиков и администраторов СУБД Firebird
6 июня
09:00 – 20:00
Москва
ExtJS/Rails CRUD приложение за 7 минут
5 мин
7KПеревод
Этот пост покажет вам простые шаги по созданию TODO веб приложения с ипользованием ExtJS, Ruby on Rails и Netzke. Это займет у вас приблизительно 7 минут, и если вам заранее любопытно стоит ли оно того, смотрите сразу последнюю часть (кстати самую большую), где и обсудим результаты. Наша цель заключается в создании веб приложения которое позволит вам добавлять, редактировать и удалять TODO задачи, а также отмечать сделанные. В дополнение к этому вы сможете сортировать и искать задачи, редактировать несколько задач одновременно, и это еще не все. Можете засечь время на своих часах, давайте приступим к работе.
+35
Поднимаем на одном сервере несколько Ruby on Rails проектов под разными версиями ruby (Nginx + Unicorn)
4 мин
17KЗдравствуйте, хабралюди!
Хочу поделиться с вами способом разворачивания нескольких приложений Ruby on Rails на одном сервере.
Поможет нам в этом RVM, Unicorn и Nginx.
Недавно заказчик попросил поставить Redmine к ним на сервер, на котором уже крутился проект на Ruby on Rails и использующий версию руби 1.9.2. А redmine работает максимум с ruby-1.8.7. Так как других проектов на сервер размещать не предполагалось, то там изначально поставили Nginx + mod_passenger. Как известно, используя mod_passenger на одном сервере не запустишь два приложения с разными версиями руби.
Хочу поделиться с вами способом разворачивания нескольких приложений Ruby on Rails на одном сервере.
Поможет нам в этом RVM, Unicorn и Nginx.
Недавно заказчик попросил поставить Redmine к ним на сервер, на котором уже крутился проект на Ruby on Rails и использующий версию руби 1.9.2. А redmine работает максимум с ruby-1.8.7. Так как других проектов на сервер размещать не предполагалось, то там изначально поставили Nginx + mod_passenger. Как известно, используя mod_passenger на одном сервере не запустишь два приложения с разными версиями руби.
+21
Request spec in Action
7 мин
5.9KТестирование стало неотъемлемой частью любой разработки программного продукта, будь то приложение под настольный компьютер, мобильное устройство или web. Уже никто не отрицает важность это этапа и последствий, которые принесет его отсутствие. Среди них большое время на проверку каждого элемента (страницы), и неожиданные сюрпризы в поведении продукта, увеличение затрат на исправление программы. Принцип написания тестов достаточно прост – «желтый цвет», «красный цвет», «зеленый цвет», рефакторинг. Где желтый цвет – это не созданный тест (pending), красный цвет – не прошедший тест, а зеленый – системе работает как надо.
Для каждого вида программирования, существует множество типов тестирования. Но есть и общие моменты, присутствующие везде. Так как основной род моей работы является создание web приложений под ROR, поговорим про особенности тестирования данных приложений.
Для каждого вида программирования, существует множество типов тестирования. Но есть и общие моменты, присутствующие везде. Так как основной род моей работы является создание web приложений под ROR, поговорим про особенности тестирования данных приложений.
+5
Установка Ruby on Rails под Windows
2 мин
97KЗаинтересовал меня Rails. Купил пару книг, прочитал… достаточно чтобы, зачесались руки и пришло время ставить сабж. И приступать… хотя бы к экспериментам.
Задача: поставить Rails под Windows 7 (не спрашивайте меня почему) и запустить сервер.
Оказалось — это квест. Пары щелчков мышью недостаточно. Конечно, если не использовать Railsinstaller, на что мне правильно намекнули в комментариях (спасибо, dreamfall).
Несколько же часов моих поисков, завершившихся таки полной и безоговорочной инсталляцией, под катом.
Задача: поставить Rails под Windows 7 (не спрашивайте меня почему) и запустить сервер.
Оказалось — это квест. Пары щелчков мышью недостаточно. Конечно, если не использовать Railsinstaller, на что мне правильно намекнули в комментариях (спасибо, dreamfall).
Несколько же часов моих поисков, завершившихся таки полной и безоговорочной инсталляцией, под катом.
+5
has_many :through => Как быстро обратиться к join-объектам?
3 мин
7.2KВы знаете, что когда требуется организовать many-to-many отношения между двумя моделями, прогрессивная часть человечества применяет join-таблицы и метод
И это чудесно, ибо в join-таблице можно насоздавать полезных (так называемых «extra») полей с дополнительной информацией о связях между объектами.
Вопрос в том, как красиво достучаться до этих extra атрибутов.
Все скринкасты и книжки, как назло, оперируют простыми примерами. Например, дружат между собой модели Article и Category. Само собой, для join-класса интуитивно напрашивается имя Categorization или ArticleCategorization.
Соответственно, если у нас есть два объекта — article и category, и мы хотим найти AR-объект (или объекты), олицетворяющий связь между ними, то авторы книжек с чистым сердцем предлагают делать так:
В жизни все сложнее. Модели нередко имеют длинные составные имена, либо между моделями такая связь, что придумывание имени для каждой join-модели превращается в маленькую пытку. Представим, что у нас модели не Article и Category, а UserGroup и Community, или Preorder и CustomerNotification. Как должна называться связующая модель? Возможны варианты.
has_many
с опцией :through => :join_model_name
. Каждая связь между двумя ActiveRecord-объектами представляет собой ActiveRecord-объект.И это чудесно, ибо в join-таблице можно насоздавать полезных (так называемых «extra») полей с дополнительной информацией о связях между объектами.
Вопрос в том, как красиво достучаться до этих extra атрибутов.
Все скринкасты и книжки, как назло, оперируют простыми примерами. Например, дружат между собой модели Article и Category. Само собой, для join-класса интуитивно напрашивается имя Categorization или ArticleCategorization.
Соответственно, если у нас есть два объекта — article и category, и мы хотим найти AR-объект (или объекты), олицетворяющий связь между ними, то авторы книжек с чистым сердцем предлагают делать так:
relations = article.article_categorizations.find_by_category_id(category)
В жизни все сложнее. Модели нередко имеют длинные составные имена, либо между моделями такая связь, что придумывание имени для каждой join-модели превращается в маленькую пытку. Представим, что у нас модели не Article и Category, а UserGroup и Community, или Preorder и CustomerNotification. Как должна называться связующая модель? Возможны варианты.
+28
Разворачиваем приложение на чистой Убунте: от A до Z
5 мин
3.6KИтак, у вас есть чистая Ubuntu, в консоли открыто ssh-соединение с сервером и консоль вас заманчиво приглашает — «root@my-awesome-host:~#» — и больше ничего нет. А хочется запустить и показать всему миру какое-то рельсовое приложение. Поехали от супа до орехов.
+31
Поддомены в Rails
4 мин
6.5KТуториал
Думаю каждый кто работал с под-доменами в Rails 3 видел данный скринкаст.
Когда столкнулся с этим примером стояла задача сделать динамические поддомены + некоторые фиксированные. Динамические должны были соответствовать некоторому полю одной из моделей. Таким образом были выдвинуты условия для конечного решения:
Когда столкнулся с этим примером стояла задача сделать динамические поддомены + некоторые фиксированные. Динамические должны были соответствовать некоторому полю одной из моделей. Таким образом были выдвинуты условия для конечного решения:
- возможность указания фиксированного поддомена, либо группы поддоменов;
- возможность привязки к полю из модели ActiveRecord;
- удобный синтаксис для записи всего этого в routes.rb.
+28