Використання ActiveAdmin як бекенду в додатку на Rails 5

Підготовка

Я буду використовувати:

  • Ruby 2.4.0
  • Rails 5 з увімкненим API-ключем
  • SQLite
  • ActiveAdmin

Підготовка додатку:

  1. Створіть папку для додатку:

mkdir rails5_api_activeadmin

cd rails5_api_activeadmin

pic

  1. Створіть Gemset для додатку та встановіть gem rails:
rvm use 2.4.0@rails5_api_activeadmin --ruby-version --create  
gem install rails

pic

  1. Ініціалізуйте новий git-репозиторій та згенеруйте порожній додаток Rails 5:
git init   
rails new . --api

pic

  1. Rails встановлено:

pic

  1. Додаємо папку налаштувань IDE до .gitignore та комітимо зміни:

pic

pic

  1. Тепер запустіть сервер і перевірте, чи працює він (я запускаю на порту 3080, але за замовчуванням — це 3000):
rails s -p 3080

pic

Моделі бази даних

Цей додаток буде використовуватися як сервіс для замовлення їжі … Читати далі

Користувацький фільтр Active Admin для NIL

Нещодавно я створив модель Rails (названа MyModel у цьому прикладі), яка містила поле :delivered_at, щоб позначити, коли повідомлення про кожен окремий об'єкт було надіслано його користувачу через завдання доставки пакетної дії. Однак поле :delivered_at було колонкою типу datetime (щоб записати дату контакту з користувачем) і тому не могло бути відфільтроване за допомогою булевого значення true/false.

Використовуючи ransacker та слідуючи цьому чудовому посту про користувацькі фільтри nil, ми створили користувацький фільтр, який передає значення 'true' або 'false' з панелі ActiveAdmin до mymodel.rb, а потім будує колекцію залежно від того, чи має об'єкт MyModel значення datetime у полі deliveredЧитати далі

Custom Filter в Active Admin — Частина 1

Active admin (ActiveAdmin) — це мій улюблений плагін для створення адміністративного інтерфейсу за допомогою Ruby on Rails.

Він значно полегшує життя розробникам. Використовуючи Active Admin, ми можемо розробляти елегантні та надійні додатки з меншим обсягом коду.

Як відомо, AA надає вбудовану функціональність фільтрів. Найскладніша частина — це створення користувацьких фільтрів, якщо у вас є вкладені або поліморфні асоціації. Є різні способи досягти цього.

Припустимо, ви хочете дозволити адміністратору залишати коментарі до продуктів. Використовуючи activeadmincomments, ви зможете це зробити. Я не буду заглиблюватися в деталі, оскільки нашою метою є створення користувацького фільтра для поліморфних асоціацій.

Active Admin створює поліморфну … Читати далі

Як знову зробити Ruby on Rails Active Admin та великі таблиці PostgreSQL дружніми

pic

Якщо ви натрапили на цю статтю, то, ймовірно, ваш Active Admin вирішив трохи «зависнути», перш ніж показати просту сторінку індексу для однієї з ваших таблиць. Дозвольте здогадатися: це велика таблиця з сотнями тисяч записів. Але чому розмір таблиці має значення, якщо нам потрібно лише показати кілька перших рядків?

Здається, що розмір має значення не для Active Admin, а для самого PostgreSQL. Якщо бути точнішими — для підрахунку всіх рядків.

Передісторія: модель одночасного доступу (concurrency model) у PostgreSQL реалізована за допомогою техніки, яка називається MVCC (multiversion concurrency control), яка, щоб забезпечити коректність результатів у середовищах з паралельними запитами, змушує виконання такого … Читати далі

Кастомний фільтр в Active Admin — Частина 2

AA використовує ransack для фільтрів, тому ми можемо визначити власну область (scope) та додати її до ransack для створення кастомного фільтра. Цей підхід є корисним, коли у вас є вкладені зв’язки або коли модель не має прямого зв’язку.

Створіть файл у розділі model concerns та імпортуйте його в модель, в якій ви хочете використовувати фільтр.

_module_ CompanyCustomFilter  
_extend_ ActiveSupport::Concern
COMPANY_FILTER_CONDITIONS = [:contains, :equals, :starts_with, :ends_with]  

_included do_  
  COMPANY_FILTER_CONDITIONS.each _do_ |condition_type|  
    _self_._scope_ "company_#{condition_type}", lambda { |user_input|  
      merge Company.ransack("name_#{condition_type}" => user_input).result  
    }  
  _end  
_end  

  def self_ .ransackable_scopes(auth_object = _nil_)  
    COMPANY_FILTER_CONDITIONS.map _do_ |k|  
      "company_#{k}".to_sym  
    _end_  
  _end  

  def self_  
    .ransackable_scopes_skip_sanitize_args  
    COMPANY_FILTER_CONDITIONS.map _do_ |k|  
      "company_#{k}".to_sym  
    
Читати далі

Фільтри в ActiveAdmin: Фільтрація значення Nil за допомогою Ransacker та ActiveAdmin

Нічого значить щось! …тож давайте фільтрувати це!

Ми - маленький стартап, і нам не потрібен величезний CMS з купою зайвих функцій, тому ми використовуємо ActiveAdmin, відкритий CMS. Хоча ActiveAdmin має свої недоліки (як будь-яке програмне забезпечення), він чудово підходить для наших потреб у більшості випадків. Однак одним із болючих моментів стала необхідність налаштування фільтрації поза стандартним фільтром, вбудованим у AA. У цій статті я опишу нашу ситуацію, потребу в налаштуваному фільтрі та те, як ви можете створити і протестувати власний фільтр.

TL;DR — Як створити налаштований фільтр для значень nil в ActiveAdmin, використовуючи Ransacker.

Нещодавно ми випустили нову Читати далі

Фільтрація в Ruby on Rails: Поради з використання геми Ransack

pic

Вітання всім 🙌. У цій статті я розгляну популярний Ruby gem Ransack, який спрощує управління даними в Rails, і поділюся деякими порадами щодо оптимізації процесу фільтрації.

Що таке Ransack?

pic

https://avatars.githubusercontent.com/u/5951504?s=200&v=4

Ransack — це популярний Ruby gem, який використовується в Ruby on Rails проєктах. Він призначений для спрощення роботи з запитами до бази даних та надання зручних функцій пошуку для користувачів. Ransack допомагає спростити складні запити в додатках на основі Active Record.

[

GitHub - activerecord-hackery/ransack: Пошук на основі об'єктів.

Пошук на основі об'єктів. Підтримка розробки Ransack на GitHub.

github.com

](https://github.com/activerecord-hackery/ransack?source=post_page-----4db2d6824b61---------------------------------------)

Сфери застосування та переваги Ransack

Ransack особливо корисний для великих … Читати далі

Як знайти, виправити та запобігти помилкам N+1 у Rails

Короткий список практичних порад щодо того, як позбутись N+1 запитів у Rails додатку

pic

Ця стаття є частиною серії: Посібник з оптимізації продуктивності Rails ⚡️

Що таке N+1 запит? 🤷‍♂️

N+1 запит — це тип проблеми з продуктивністю, яка часто виникає при використанні об'єктно-реляційного мапера (ORM), такого як Active Record у Rails додатку. Вона виникає, коли ORM виконує окремий запит для кожного об'єкта з списку об'єктів, замість того, щоб використати один запит для завантаження всіх об'єктів одразу.

Наприклад, розглянемо наступний код:

# Отримуємо всі пости  
posts = Post.all  

# Для кожного поста буде виконано новий запит для автора  
posts.each do |post|  
 
Читати далі

Створення клону Instagram за допомогою Ruby on Rails: всебічний посібник

Вступ

Створення соціальної медіаплатформи з нуля — це захоплююча подорож, і в цьому детальному посібнику ми розглянемо покроковий процес створення клонa Instagram за допомогою фреймворку Ruby on Rails. Від налаштування проекту до впровадження передових функцій, таких як автентифікація користувачів, лайки та підписки, цей посібник стане вашим основним ресурсом для створення потужного додатку соціальної мережі.

Налаштування проекту

Щоб розпочати створення нашого клону Instagram, ми створили новий проект за допомогою команди rails new instaclone та створили репозиторій на GitHub під назвою "instaClone". Базову основу проекту ми заклали з інтеграцією таких необхідних інструментів, як Git і GitHub.

Створення постів за допомогою Scaffold

Першим … Читати далі

Як оновити мій додаток до Rails 7

pic

Система до оновлення

  • Ruby 2.7.2 як основний інтерпретатор ruby
  • Rails 6.1 як фреймворк
  • Використання Sprockets для керування CSS та JavaScript
  • Bootstrap 5.1.3 як фронтенд-фреймворк
  • Resque для обробки фонних завдань
  • Rbenv як система керування версіями ruby
  • PostgreSQL як база даних
  • Puma + Nginx як веб-сервер
  • Ubuntu 20.04 як операційна система

Резервне копіювання та створення нової гілки git

  • У моїй розробницькій системі (Mac OS Big Sur) я роблю резервну копію папки з програмою, стискаючи її в zip файл
  • Створюю нову гілку git для оновлення
  • git checkout -b 51-new-branch-name
  • Використання нової гілки git, ймовірно, достатньо, але я хочу створити план B для резервної
Читати далі