Що нового в Ruby on Rails 8: глибоке занурення у майбутнє

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

pic

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

Leave a Reply

Your email address will not be published. Required fields are marked *