Використовуємо ActiveStorage вже сьогодні!

4 хв. читання
27 листопада 2017

Не так давно DHH оголосив, що Rails 5.2 матиме новий компонент під назвою ActiveStorage. Він буде керувати завантаженням файлів безпосередньо за допомогою Rails.

Відтоді було зроблено важливі кроки в інтеграції ActiveStorage в Rails і ви вже сьогодні можете фактично використовувати ActiveStorage. В цій статті описано процес оновлення застосунку на Rails для використання ActiveStorage.

Попередження! Ви будете використовувати Rails нестабільної версії, тож можуть виникнути непередбачувані проблеми.

Налаштування ActiveStorage для Rails

  1. Якщо ви користуєтеся версією Rails нижче 5.1.14, то вам слід оновити Rails до 5.1.14, оновивши ваш Gemfile.
gem 'rails', '~> 5.1', '>= 5.1.4'
  1. Виконайте команду $ bundle update rails.
  2. Запустіть $ rails app:update і виправте розбіжності в коді.
  3. Впевніться, що перехід на версію 5.1.14 пройшов нормально.
  4. Тепер ми оновимо Rails до останньої версії. Додайте наступні рядки до вашого Gemfile:
git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end
...
gem 'rails', github: 'rails/rails'
gem 'arel', git: 'https://web.archive.org/web/20230321051012/https://github.com/rails/arel.git'
gem 'bootsnap', '~> 1.1', '>= 1.1.5', require: false
  1. Запустіть $ bundle update rails.
  2. $ bundle exec rails -v має відобразити останню версію, Rails 5.2.0.alpha.
  3. Оновіть конфіги вашого застосунку. Запустіть $ bundle exec rails app:update.
  4. Коли ви виконуєте $ ./bin/rails --tasks, ви повинні побачити у доступних командах rails active_storage:install.
  5. Запустіть $ ./bin/rails active_storage:install, щоб згенерувати файл міграції.
  6. Виконайте $ ./bin/rails db:migrate. Тепер база даних sqlite має бути готова до роботи з ActiveStorage.

Простий приклад завантаження зображення з ActiveStorage

Досі ми лише готували застосунок до роботи з ActiveStorage. Тепер, коли все налаштовано і додаток може використовувати ActiveStorage, ми можемо перейти до практики:

Напишемо просту функцію, яка дозволить нам створювати повідомлення з зображеннями, які використовують ActiveStorage.

  1. Створіть модель post: $ ./bin/rails g model post.
  2. Додайте у файлі міграції до таблиці post дві колонки: title та body.
# db/migrate/20171114063756_create_posts.rb
class CreatePosts < ActiveRecord::Migration[5.2]
  def change
    create_table :posts do |t|
      t.string :title
      t.text :body

     t.timestamps
    end
  end
end
  1. Створіть контролер для ресурсів повідомлень. $ ./bin/rails g controller posts.
  2. Додайте до нього шлях в config/routes.rb.
Rails.application.routes.draw do
  resources :posts
end
  1. Нам необхідно зв'язати повідомлення з зображеннями.
class Post < ApplicationRecord
  has_many_attached :images
end
  1. Необхідно додати код індексу, відображення і створення дій.
# app/controllers/posts_controller.rb
class PostsController < ApplicationController
  # we will display post form here
  def index
    @post = Post.new
  end
  # we will create post here
  def create
    post = Post.create! params.require(:message).permit(:title, :body)
    post.images.attach(params[:message][:images])
    redirect_to post
  end
  # we will display post with photo
  def show
    @post = Post.find(params[:id])
  end
end
  1. Додамо представлення index.html.erb для повідомлень використовуючи наступний код. Він буде відображати завантаження localhost:3000/posts.
# app/views/posts/index.html.erb
<%= form_with model: @post, local: true do |form| %>
  <%= form.text_field :title, placeholder: "Title" %><br>
  <%= form.text_area :body %><br><br>
  <%= form.file_field :images, multiple: true %><br>
  <%= form.submit %>
<% end %>
  1. Додамо представлення для відображення повідомлень.
# app/views/posts/show.html.erb
<%= image_tag @post.images.first %>
  1. Спробуйте завантажити фото, і ви побачите, як представлення show відобразить зображення, яке ви щойно надіслали.

Тепер зображення зберігається локально, в каталозі storage, на базовому рівні застосунку. Але ви можете налаштувати все так, щобфайли зберігались у хмарних сервісах типу AWS S3, Google Cloud, Azure.

Як ви можете бачити, ActiveStorage являє собою спрощену, проте добре інтегровану з компонентом ActiveRecord, систему керування файлами. ActiveStorage тільки почав свій шлях, проте ми вже можемо бачити, що він покриває більшу кількість завдань пов'язаних з керуванням файлами. Хоча для Rails існують інші системи керування файлами, я пропоную вам роздивитися в першу чергу саме ActiveStorage.

Також вам слід ознайомитися з документацією.

І ви можете переглянути остаточний код на github.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.8K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація