Ответы пользователя по тегу Ruby on Rails
  • Зачем нужны Engines/движки в Rails?

    Сами-то читали статью?

    To see demonstrations of other engines, check out Devise, an engine that provides authentication for its parent applications, or Thredded, an engine that provides forum functionality. There's also Spree which provides an e-commerce platform, and Refinery CMS, a CMS engine.
    Ответ написан
  • Для чего нужно подключать Github к Heroku?

    На Хероку есть свой гит-репозиторий: https://prntscr.com/gfdiji

    Вы можете залить всё в него, а затем переключиться на него, и если ничего не сломалось — отвязать Гитхаб.
    Ответ написан
  • Какие плюсы дают современные js фреймворк в Rails вместо assets pipeline?

    Фронтенд-фреймворк - это каркас клиентского приложения, служащий для структурирования кода (разделения логики получения данных, обработки событий, отображения данных). Очень близко (хотя это весьма дискуссионный вопрос) стоит к паттерну MVC, где M - хранилище данных, а V - система шаблонизации. Новый человек в проекте, имеющий опыт работы с тем же фреймворком, значительно быстрее вольётся в процесс, поскольку всё будет разложено сходным образом.

    Современные клиентские шаблонизаторы позволяют обновлять в DOM только изменившиеся фрагменты, т.е. не требуют перезагрузки всей страницы. Это позволяет оптимизировать обмен данными между сервером и клиентом (серверу не нужно каждый раз рендерить всю страницу, достаточно всего лишь извлечь нужные данные).

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

    Наконец, фреймворки содержат модули клиентского роутинга, что улучшает UX.

    В принципе, все вышеописанные возможности вполне возможно собрать с помощью множества тех или иных библиотек, но в результате всё равно получится фреймворк, просто никому не известный :)
    Ответ написан
  • Как построить React+redux+RubyOnRails приложение?

    Если вы хотите подход с SPA, то делайте два приложения: одно на фронтенд, другое на бэкенд. Фронтенд вы можете просто собирать при помощи вебпака в html+css+js, а затем хостить на nginx. Это даст вам хот-релоадинг, поддержку модульности и современных стандартов JS. Можете также заморочиться и сделать промежуточный сервер на Node.js, который будет поддерживать серверный рендеринг фронтенда. Бэкенд же разрабатывайте на рельсах в режиме api.

    Конечно, вы можете продолжать делать как сейчас, и это даже будет работать, но у вас приложение получится сильно связанным. В будущем отрефакторить такое будет значительно сложнее. С другой стороны, если у вас мало сильных фронтендеров, то переход на SPA более опасен, так как им придётся переписывать практически всё, что уже есть. Кроме того, сложный SPA в Redux при недостатке опыта может стать лютым спагетти-кодом.
    Ответ написан
  • CRUD app Ruby on Rails?

    Переделать роут на get /:alias. Поставить его самым последним, чтобы он не перехватывал другие, более специализированные роуты. Добавить в таблицу pages строковую колонку alias и сделать на ней индекс unique. В контроллере ищем нужную страницу по Page.find_by_alias(alias) и рендерим. Для удобного редактирования лучше всего будет подключить админку типа ActiveAdmin.
    Ответ написан
  • Ruby, что ты такое?

    Эта особенность синтаксиса Ruby в рельсах широко распространена. На самом деле секрет в том, что в Ruby существуют переменные уровня класса (синтаксис @@var_name), которые разделяются между всеми экземплярами класса (близким аналогом можно назвать свойства прототипа объекта в JavaScript). При этом в Ruby можно вызывать методы класса (self.method_name) во время его определения. Таким образом и работает вся эта магия.

    class A
      def print_foo
        puts "foo: #{@@foo_value}"
      end
    
      private
      
      # приватный метод для "конфигурирования"
      def self.foo(foo_value)
        @@foo_value = foo_value # сохраняем в переменную класса
      end
    end
    
    class B < A
      foo :bar
    end
    
    b = B.new
    b.print_foo  # выведет foo bar
    Ответ написан
  • Rails мультисайт?

    А почему бы просто не сделать админку отдельным проектом? Пусть она сама редактирует базу, а чтобы обеспечить единство модели данных - вынести собственно модели в отдельные гемы.
    Ответ написан
  • Как работать с Angular и Rails?

    Попробуй f.text_field :title, html: {'ng-model': 'title'}, а вообще я бы рекомендовал писать всё, что касается ангуляра, чистым html без всяких form builder. Они рассчитаны на создание серверных форм, а в ангулярном приложении рельсы по-хорошему должны предоставлять всего лишь api-слой, если только без генерации на стороне сервера действительно не обойтись (например, для SEO).
    Ответ написан
  • Адреса в rails?

    Ну и правильно делает, и рельсы тут ни при чём. Следует писать URL полностью, начиная с типа протокола:

    <li><a href="https://www.facebook.com/bombaybicycleclub">Facebook</a></li>
    Ответ написан
  • Как в Rails из формы узнать содержимое поля (как бы f.name)?

    Может быть тебе нужно написать <%= f.text_field :name %> ?

    f — это не объект со значениями полей формы, а Form Builder, который генерирует HTML для полей форм.
    Ответ написан
  • Почему стали популярны less, sass, ruby on rails, bower, grunt? И зачем они нужны?

    Ну вот, предположим, ты делаешь фронтенд для своего сайта. Нужно заверстать макеты. Можно, конечно, писать и на HTML, но довольно нудно писать все теги и потом их закрывать. Тут как раз предложили emmet. То есть пишешь в редакторе CSS-подобный селектор, нажимаешь Таб, и он превращается в HTML. Отлично, а нельзя ли сразу так и писать? А ведь можно, для этого есть, например, шаблонизатор Jade.

    Замечательно. Дальше никуда без CSS. Вот только плохо постоянно копипастить цвета и размеры элементов, да и код кое-где повторяется. И для этого как раз есть CSS-препроцессоры, например, Less и SASS, они умеют переменные, вложение правил, миксины для повторяющегося кода. SASS даже мощнее: есть два стиля написания кода — как в Jade и как в обычном CSS, да и всякие функции — даже БЭМ при желании на нём завести можно.

    Отлично, теперь можно скачать Bootstrap, иконки Font-Awesome, jQuery, какой-нибудь фреймворк, ещё парочку библиотек и вперёд. Стоп. У нас XXI век как-никак, пускай компьютер сам и скачает, да ещё и обновлять быстрее будет. Для этого как раз есть менеджер пакетов Bower. Он не просто скачает все компоненты, но и пропишет их в файл с указанием версий, заодно и требуемые зависимости подберёт, а потом одной командой установить или обновить можно будет.

    Круто. Вот бы ещё попробовать новую версию JavaScript, ту самую, которая ES6 называлась. Да вот беда, пока что большинство фич из этой версии, те же стрелочки, нативно поддерживается нормально разве что в Файрфоксе и Эдже, что нам явно не подходит. И для этого можно использовать JS-транспилер Babel. Он возьмёт код на ES6 и преобразует в соответствующий код на ES5. Так же можно и CoffeeScript попробовать.

    Упс, попробовали новую вёрстку, а она в некоторых браузерах расползлась. Надо вендорные префиксы добавить, можно, конечно, и для CSS-препроцессора миксины добавить, вот только для многих случаев они получатся жутко неудобные. Выход опять же есть — CSS-постпроцессор, например, Autoprefixer. Просто указываешь ему минимальные версии браузеров, а он сам в нужных местах префиксы сделает.

    Ужас, это все эти команды вручную вызывать что ли?! Нет, конечно. Для этого и существуют системы сборки, такие как Grunt и Gulp. Мало того, что они просто все вышеперечисленные команды сразу вызовут, так ещё и помогут объединить и минифицировать CSS- и JS-файлы, и последят за изменением исходников, чтобы сразу выполнить требуемые задачи снова, а также и тесты прогонят — TDD, говорят, теперь тоже в моде.

    Разумеется, в некоторых фреймворках, таких как Ruby on Rails и Laravel, можно настроить Asset Pipeline для автоматизации работы с исходниками, но это уже, конечно, частное решение.
    Ответ написан