Впровадження динамічного пошуку за допомогою Turbo Frames у Ruby on Rails 7

У веб-розробці важливим аспектом є забезпечення зручного та ефективного пошуку, який позитивно впливає на досвід користувачів. Для мого нещодавнього проєкту на AVIMBU я реалізував функціональність пошуку, яка запитує як локальні дані, так і зовнішні API. Це було досягнуто за допомогою TurboFrames від Hotwire у веб-додатку Ruby on Rails 7.

У цьому блозі я розповім, як реалізувати динамічну панель пошуку, яка отримує дані як локально, так і з зовнішнього джерела (наприклад, API), і все це без перезавантаження сторінки завдяки TurboFrames.

Розділ 1: Початкова настройка проєкту

Оскільки ми будуємо динамічний пошук для проєкту на Ruby on Rails 7, потрібно виконати кілька кроків … Читати далі

Найкращі Ruby on Rails геми, які обов’язково слід використовувати в 2024 році

Чи ви досвідчений розробник Rails, чи тільки починаєте, вибір правильних gems може зробити величезну різницю. Gems — це потужні бібліотеки, які додають важливі функції до додатків Rails без потреби писати їх з нуля. Ось список обов'язкових gems на 2024 рік, які допоможуть оптимізувати процес розробки Rails.

pic

Аутентифікація та авторизація

  1. Devise — Аутентифікація
    Devise GitHub
  2. Pundit — Авторизація
    Pundit GitHub
  3. Cancancan — Авторизація
    Cancancan GitHub
  4. OmniAuth — Аутентифікація через кілька постачальників
    OmniAuth GitHub

Обробка фонових завдань

  1. Sidekiq — Обробка фонових завдань
    Sidekiq GitHub
  2. Delayed Job — Обробка фонових завдань
    Delayed Job GitHub
  3. Resque — Фонові завдання з Redis
    Resque GitHub
Читати далі

Дані мають значення: Топ-10 Gems для управління базами даних та оптимізації в Rails

pic

Звісно! Давайте розглянемо топ-10 Ruby Gems, які можуть значно підвищити продуктивність вашого додатку Ruby on Rails через техніки кешування та стратегії оптимізації. Ці Gems можуть суттєво покращити ваш робочий процес, підвищити якість коду та зміцнити безпеку. Ось вони:

1. Dalli:

  • Dalli — популярний Ruby Gem, який надає надійний інтерфейс для підключення вашого Ruby-додатку до кешуючої системи Memcached. Memcached зберігає пари ключ-значення в пам'яті, зменшуючи навантаження на базу даних і прискорюючи доступ до часто використовуваних даних.
# Підключення до серверу Memcached  
cache = Dalli::Client.new('localhost:11211')  
# Зберігання даних у кеші  
cache.set('user:123', { name: 'John Doe', email: '[email protected]' })  
# Отримання даних 
Читати далі

Міграція з Resque на Sidekiq у Rails

pic

Мотивація

Мій Rails-додаток використовував Resque для фонових задач, але я вирішив замінити його на Sidekiq, тому що:

  • Sidekiq може ефективніше використовувати серверні ресурси завдяки багатопоточності.
  • Веб-інтерфейс Sidekiq має менше залежностей, ніж Resque.
  • Я вважаю, що Sidekiq краще підтримується і має більш активну підтримку.

Кроки міграції

1. Налаштування Sidekiq

Поки Resque працював у продакшн-режимі, я додав налаштування Sidekiq і спробував окремо запустити його в продакшн-режимі.

Додайте sidekiq у Gemfile.

gem 'sidekiq'

Додайте маршрути для веб-інтерфейсу Sidekiq в routes.rb

require "resque_web"  
require 'sidekiq/web'  

Rails.application.routes.draw do  
  mount ResqueWeb::Engine => "/resque_web"  
  mount Sidekiq::Web => '/sidekiq'  

  # ...  
end

Створіть config/initializers/sidekiq.rb (увага: використовуйте … Читати далі

Список корисних Ruby-джемів при створенні веб-додатків

pic

Фото: Joshua Fuller на Unsplash

Спільнота Ruby створила багато бібліотек (Gems), які корисні для розробки веб-додатків. Коли я створював веб-додатки за допомогою RoR останніми роками, я натрапив на корисну бібліотеку Ruby, яку поділюсь у списку нижче 💎

Зміни

Я буду оновлювати цю статтю час від часу, якщо знайду більше корисних бібліотек Ruby.

  • 24 березня 2023: додано бібліотеки для тестування simplecov, factory_bot, faker.
  • 14 грудня 2022: додано administrate в категорію Адмін Інтерфейс.
  • 21 грудня 2022: додано бібліотеки для м’якого видалення в категорію Маніпуляція Даними.
  • 01 березня 2022: додано розділ JSON API

Категорії:

  1. Аутентифікація та
Читати далі

Остаточний посібник з подолання технічного боргу в проєкті на Rails

pic

Як вижити в старій монолітній Ruby on Rails програмі за допомогою Rails Engines. Для початку, ця стаття не про витягування модулів з основного додатку в Rails Engine, а про використання потужності Rails Engine для того, щоб дозволити вам переосмислити і переписати кодову базу, яка потребує цього.

Якщо ви коли-небудь стикалися з проектом на Rails, це може налякати, бо кодова база настільки заплутана, що ви не впевнені, чи можна торкатися чогось, навіть не розумієте, що відбувається в деяких частинах коду, бо 80% коду — це виправлення крайніх випадків та недоліків початкового дизайну. Ви швидко приходите до висновку, що все краще … Читати далі

DateRangePicker з StimulusJS, Import maps, бібліотека Ransack

pic

Daterangepicker — це надзвичайно популярна бібліотека. На жаль, вона залежить від jQuery. Але є переписаний варіант, що використовує vanilla JS: vanilla-datetimerange-picker.

1. Показати Daterangepicker за допомогою StimulusJS

rails g stimulus daterangepicker
// app/javascript/controllers/daterangepicker_controller.js  
import { Controller } from "@hotwired/stimulus"  

export default class extends Controller {  
 connect() {  
 new DateRangePicker(this.element, {})  
 }  
}




2. Покращення імпорту активів

Імпортування через CDN у файлах Rails є поганою практикою.

Ми можемо перемістити тег `вapplication.css`:

/* app/assets/stylesheets/application.css */  
@import url('https://cdn.jsdelivr.net/gh/alumuko/vanilla-datetimerange-picker@latest/dist/vanilla-datetimerange-picker.css');

І імпортувати moment за допомогою import maps:

./bin/importmap pin moment
// app/javascript/application.js  
import moment from 'moment'  
window.moment = moment

Тепер ви можете … Читати далі

Оволодіння власними фільтрами в Active Admin для застосунків на Rails

Вступ:

Active Admin — це потужна адміністративна платформа для застосунків Ruby on Rails, яка спрощує процес створення надійних та налаштовуваних адміністративних інтерфейсів. Одна з його ключових можливостей — це здатність легко створювати та застосовувати власні фільтри, що дозволяє адміністраторам ефективно керувати та аналізувати дані. У цьому блозі ми дослідимо можливості власних фільтрів в Active Admin, розглянемо їх потенціал та продемонструємо, як використовувати їх для покращення адміністративних можливостей вашого застосунку Rails.

Розуміння фільтрів Active Admin:

Active Admin поставляється з вбудованими фільтрами, які допомагають користувачам швидко шукати та фільтрувати записи за конкретними критеріями. Однак є ситуації, коли стандартних фільтрів недостатньо. Тут на … Читати далі

Використання Ransack як пошукової системи

Налаштування

Додайте до вашого Gemfile:

  • gem "ransack"
  • Версія з GitHub: gem "ransack", github: "activerecord-hackery/ransack"
  • Потім bundle

Для цього прикладу я буду шукати Користувачів за username.

Отже, у моєму users_controller.rb я можу зробити так у моєму index екшні:

def index  
 @q = User.ransack(params[:q])  
 @users = [@q](http://twitter.com/q).result(distinct: true)  
end

@q — це параметри пошуку, які використовує ransack у своїй формі.

У моєму users/index.html.erb я маю налаштувати форму ось так:

<%= search_form_for [@q](http://twitter.com/q) do |f| %># Пошук, якщо поле username містить...  
 <%= f.label :username_cont %>  
 <%= f.search_field :username_cont %><%= f.submit %>

Закінчення _cont у пошуковому полі вказує, що ми шукаємо, чи містить … Читати далі

Використання Ransack з Ajax таблицями даних у Ruby on Rails

pic

Ransack — це гем для Rails, який використовується для створення розширених форм пошуку. Він простий у використанні. Хоча можна створювати користувацькі запити для пошуку в Rails, використання гему ransack спрощує запити, зменшуючи навантаження на розробника.

Я використовую ransack версії 2.3.2 та ajax-datatables-rails версії 0.4.3.

Додайте останню версію гему ransack у ваш Gemfile.

gem 'ransack'  
bundle install

У контролері, articles_controller.html.erb

class ArticlesController < ApplicationController  
 def index  
 @q = Article.ransack(params[:q])  
 respond_to do |format|  
 format.html  
 format.json { render json: ArticleDatatable.new(view_context, {ca: current_admin}) }  
 end  
 end  
end

У індексі статей, index.html.erb

<%= search_form_for [@q](http://twitter.com/q), :remote => true do |f| %>Автор  
<%= f.select(:author_name_cont, options_for_select(Author.order(:name).collect{|t| [t.name, 
Читати далі