Ruby on Rails продовжує розвиватися та адаптуватися до потреб сучасної веброзробки. Давайте розглянемо деякі захоплюючі функції, які представляють наступний етап еволюції цього улюбленого фреймворка.
1. Покращена асинхронна обробка з Background Tasks API
Rails 8 вводить більш інтуїтивний спосіб роботи з фоновими завданнями за допомогою нового нативного Background Tasks API. Ця функція спрощує асинхронні операції без потреби в сторонніх бібліотеках, таких як Sidekiq чи Delayed Job.
class UserMailer < ApplicationMailer
background :welcome_email
def welcome_email(user)
mail(
to: user.email,
subject: "Ласкаво просимо на нашу платформу!"
)
end
end
# Використання
UserMailer.welcome_email(user).deliver_later
2.
Покращена інтеграція з WebSocket
Реалізація WebSocket була вдосконалена завдяки спрощеному API та кращій інтеграції з Turbo Streams:
# app/channels/chat_channel.rb
class ChatChannel < ApplicationCable::Channel
def subscribed
stream_from "chat_#{params[:room_id]}"
end
def speak(data)
Message.create!(
content: data['message'],
room_id: params[:room_id],
user: current_user
)
end
end
# app/models/message.rb
class Message < ApplicationRecord
after_create_commit -> {
broadcast_append_to "chat_#{room_id}",
partial: "messages/message",
locals: { message: self }
}
end
3.
Вбудоване версіонування API
Rails 8 представляє нативну підтримку версіонування API, що значно спрощує управління різними версіями вашого API:
# config/routes.rb
Rails.application.routes.draw do
namespace :api do
version 1 do
resources :users
end
version 2 do
resources :users
end
end
end
# app/controllers/api/v1/users_controller.rb
module Api::V1
class UsersController < ApiController
def index
@users = User.all
render json: @users
end
end
end
Покращена продуктивність бази даних за допомогою розумного індексування
Фреймворк тепер включає рекомендації щодо індексування та автоматичне управління індексами:
class CreateUsers < ActiveRecord::Migration[8.0]
def change
create_table :users do |t|
t.string :email
t.string :name
t.timestamps
t.smart_index :email # Автоматично визначає тип індексу
t.smart_index [:name, :email] # Композитний індекс з використанням аналітики
end
end
end
5.
Інтегроване перевіряння типів
Rails 8 вводить опціональну перевірку типів під час виконання, що підвищує надійність коду:
class User < ApplicationRecord
type_check do
attribute :name, String
attribute :age, Integer
attribute :settings, Hash[Symbol, String]
end
def display_name
"#{name} (#{age})"
end
end
Покращений Asset Pipeline із інтеграцією Vite
Asset Pipeline тепер включає нативну підтримку Vite, що забезпечує кращу роботу з JavaScript модулями:
# config/vite.rb
Vite.configure do |config|
config.entrypoints = {
'application' => 'app/javascript/application.js',
'admin' => 'app/javascript/admin.js'
}
end
# app/views/layouts/application.html.erb
<%= vite_javascript_tag 'application' %>
<%= vite_stylesheet_tag 'application' %>
7.
Покращене кешування з інвалідацією на рівні фрагментів
Система кешування тепер підтримує більш точкову інвалідацію кешу:
class ProductsController < ApplicationController
def show
@product = Product.find(params[:id])
@related_products = @product.related_products
fresh_when(
etag: [@product, @related_products],
last_modified: @product.updated_at,
public: true,
fragment: 'product_details'
)
end
end
8.
Покращена тестова система
Тестова система була покращена з кращою підтримкою сучасних практик тестування:
class UserTest < ActiveSupport::TestCase
test "створення користувача з валідацією" do
user = User.new(email: "[email protected]")
assert_changes -> { User.count }, from: 0, to: 1 do
assert_emails 1 do
user.save!
end
end
assert_enqueued_jobs 1, only: WelcomeEmailJob
end
end
Висновок
Хоча ці функції представляють можливі покращення для фреймворку Rails, вони демонструють продовження еволюції Ruby on Rails для задоволення сучасних потреб розробки.
Фреймворк зберігає свою філософію «конвенція замість конфігурації» (convention over configuration), при цьому адаптуючись до нових викликів і технологій.
Пам'ятайте, що реальні функції в Rails 8 можуть відрізнятися від цих прогнозів, але вони відображають напрямок, у якому рухається веб-розробка, а також типи покращень, які можуть бути корисними для розробників Rails.
Примітка: Завжди звертайтеся до офіційної документації Ruby on Rails для найактуальнішої інформації про функції та релізи.
Перекладено з: What’s New in Ruby on Rails 8: A Deep Dive into the Future