Ответы пользователя по тегу Ruby on Rails
  • Как отрендерить метод со статусом?

    @malroc
    Сделайте обёртку над методом, которая будет возвращать сразу хэш с ключами :json и :status. Ну то есть что-то вот такое:
    def call_404_wrapper
      { json: Error::call_404, status: :not_found }
    end
    Ответ написан
    Комментировать
  • Crystal, Elixir, Golang. Куда ехать рельсовику?

    @malroc
    Я честно говоря его пока не вижу, этого "будущего мэйнстрима".
    Ясно что Ruby on Rails потихоньку устаревает.
    Почти весь мэйнстримный вспомогательный инструментарий сейчас разрабатывается под Node.js: gulp, bower, babel, postcss (ещё не мэйнстрим но видимо будет). Опять же почти весь вспомогательный инструментарий RoR, который когда-то был либо мэйнстримом (SCSS, Compass), либо задавал тон в индустрии (Sporckets, Coffeescript) сейчас начинают выглядеть анахронизмом на фоне тех же gulp, postcss и babel + ES6. То есть по части инструментария однозначно рулит Node.js. Но это инструментарий.
    В ту же копилку вэбсокеты, по части которых нода - эаталон, а RoR всё никак их толком не внедрит (вроде в 5 версии хотят). Есть Faye, штука неплохая, но слишком заметно что чужеродная для RoR.
    Ещё один плюс ноды - возможность изоморфного рендернига контента для SPA. Но тут уже вопрос в языке, понятно что ни на чём другом кроме JS это не реализуешь.
    В общем RoR конечно большинство основных новых веяний в индустрии благополучно прозевал и постепенно превращается в резервацию со своей атмосферой. Нода на передовой НО только по всякой вспомогательной части, сопоставимого по масштабу фреймворка на ней как не было, так и нет.
    Всё остальное (Go и т.д.) ещё настолько сыро, что даже обсуждать по-моему нечего.
    Ответ написан
  • Как вывести в теме и теле письма данные из переменной?

    @malroc
    Если шаблонизатор ERB, то правильный синтаксис <%= @tmp %> (забыли % перед закрывающей скобкой).
    Ответ написан
  • Как в Ruby on Rails поменять часовой пояс?

    @malroc
    Но в моделях когда пишу Time.now, он сохраняет не текущую дату (часы), а раннюю на 3 часа.

    Вместо Time.now правильнее использовать Time.zone.now (или Time.current, что примерно одно и то же). В базе данных всё равно всё будет храниться в UTC, но это влияет на взаимодействие с клиентом. В вашем случае разницы не будет, но это потому что серверное и клиентское время у вас одинаковое.

    И еще, вместо того, чтобы написать Moscow, нельзя сделать другое, чтобы по текущему часовому поясу определила система?

    config.time_zone - это не серверное время (оно как раз читается из системы), это предполагаемый часовой пояс клиента. То есть когда время приходит от клиента/отображается клиенту, оно конвертируется из/в этот пояс.
    В общем:
    • Time.now - системное время, в часовом поясе который прописан в системе на сервере
    • Time.zone.now - время клиента, определяется через config.time_zone, либо на ходу через Time.zone =
    • База данных - всё хранится в UTC + 0
    Ответ написан
    8 комментариев
  • Использование предустановленных значений в базе (rspec rails testing)?

    @malroc
    Правильно в данном случае именно seeds.rb а не миграция, причём не только для тестирования.
    Только его грамотно написать нужно, чтобы не вставлял уже существующие значения. Тогда rake db:seed можно будет вызывать в любой момент времени без всяких опасений.
    Ответ написан
    2 комментария
  • Выполнение update параметров через определенное время в rails?

    @malroc
    RoR сам по себе не работает в бэкграунде (т.е. когда не выполняется какой-либо HTTP-запрос).
    Чтобы выполнять задания по таймеру в любом случае нужен отдельный worker-процесс. Дальше могут быть варианты, whenever или что-то ещё, но вообще в современных проектах обычно whenever.
    Ответ написан
    Комментировать
  • Rails 4 asset pipeline - как настроить области видимости?

    @malroc
    Если вам в гарантированно в контроллере c1 не понадобится джаваскрипт из c2 и наоборот, создайте два разных скомпилированных джаваскрипт-файла вместо одного (application.js), либо просто исключите c1.js и c2.js из application.js и подключайте их потом отдельно (второй способ менее трудозатратен, но увеличивается количество get-реквестов, т.к. получится по 2 подключаемых js-файла на контроллер - application.js и c1/2.js).
    В обоих случаях для продуктового окружения нужно будет изменить настройки компиляции ассетов (т.к. по умолчанию в публичном доступе остаётся только application.js).
    Ответ написан
    Комментировать