Локализация в javascript в Ruby on Rails

При разработке многоязычного приложения мы рано или поздно столкнемся с необходимостью локализации строк используемых в javascript. В Ruby on Rails для этих целей есть замечательный гем i18n-js. Мне понадобилось некоторое время, чтобы разобраться как он работает, не смотря на наличие документации. В какой-то момент я даже было подумал, что это безнадежный вариант и чуть было не бросил эту затею, хотя на самом деле все оказалось просто.

Локализуем надписи select2 из примера одной из предыдущих статей.

Хитрые роуты с локалями в Ruby on Rails

  scope "/:locale", locale: /#{I18n.available_locales.join("|")}/ do
    resources :posts
    root to: redirect("/%{locale}/posts", status: 302)
  end
  root to: redirect("/#{I18n.default_locale}", status: 302), as: :redirected_root
  get "/*path", to: redirect("/#{I18n.default_locale}/%{path}", status: 302), constraints: {path: /(?!(#{I18n.available_locales.join("|")})/).*/}, format: false

Рассмотрим вышеуказанный кусок кода из файла config/routes.rb и построчно изучим что же он делает.

Передача данных в javascript при помощи gon и jbuilder в Rails

Порой возникают задачи в которых нужно передать данные из сервеного кода в javascript.

Я уже писал о варианте решения данной задачи на PHP для фреймворка Yii, а сейчас пришла очередь Ruby on Rails. Для этих целей уже существует вполне удобный гем gon и у него даже есть неплохая документация. Тем не менее при использовании данного гема возникают некоторые вопросы, на которые нет подробных ответов и инструкций, поэтому я решил поделиться своим опытом на примере простого приложения.

Генерация (скаффолдинг) админки в Ruby on Rails

Как правило каждое приложение на Ruby on Rails имеет какой-то свой административный интерфейс, если только это не совсем простенький полу-статичный сайт визитка (наверное в таком случае больше подойдут Sinatra или Padrino?). Известный человек в мире Rails — Райан Бейтс в одном из своих первых рейлскастов предлагает объединять в коде административный и публичный раздел. Думаю имеет место и другой подход. Вот почему:

  • админка, как правило, содержит больше действий в контроллерах, более сложный вывод данных с обилием различных полей;
  • публичная часть обычно ограничивается гораздо более простым выводом на страницу;
  • объединение кодовой базы административной и публичной части приводит к увеличению сложности кода и к наличию множества проверок на принадлежность пользователя к группе администраторов.

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

Хочу рассказать вам о том, как же максимально просто провести такое разделение на примере тестового приложения.

Динамическая инициализация новых виджетов твиттера

В сентябре 2012 года Twitter анонсировал новые захватывающие «инструменты реального времени для разработчиков веб-сайтов» ©, то есть новые виджеты. Причем старые виджеты кажется должны были перестать поддерживаться как раз в мае 2013, но видимо отключат их таки в июне. Так что самое время подумать о переезде на новую версию APi и новые виджеты.

Настройки виджета Embedded Timeline можно найти на сайте для разработчиков. Интересно то, что о динамической подгрузке виджета практически нигде не сказано. А порой это бывает нужно, например, когда часть контента страницы или даже вся страница подгружается аяксом. Как же это сделать? Есть ответ!

Редирект с www средствами роутинга в Ruby on Rails

В большинстве случаев редирект с поддомена www на домен второго уровня (или обратно) реализуется на уровне web-сервера (например, apache или nginx). Вот пример редиректа, настраиваемого в конфиге nginx:

        if ($host = 'www.dhampik.ru') {
                rewrite  ^/(.*)$  http://dhampik.ru/$1  permanent;
        }

Однако такая возможность имеется не всегда - иногда просто нет доступа к настройкам web-сервера, например, если вы используете хостинг heroku. В этом случае может помочь настройка редиректа средствами роутинга в Ruby on Rails.

Проблемы использования twitter bootstrap в Ruby on Rails на Windows

Пишем сайт. На Ruby on Rails. Хотим простого и красивого интерфейса из коробки и решаем использовать Twitter Bootstrap. И случилось такое дело, что разрабатываем мы в Windows. Конечно разрабатывать ruby-приложения на Windows - не лучшая идея, однако порой — вынужденная мера (например, под рукой у вас есть только виндовый компьютер или вы попали в команду "специфических" разработчиков).

Для подключения twitter bootstrap eсть 2 наиболее популярных гема - twitter-bootstrap-rails и bootsrap-sass. Разберем сложности, которые мы можем встретить при их использовании.