Rails 5.2を待たずに今すぐActiveStorageを使ってみた(翻訳)

概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Using ActiveStorage Today (prior to Rails 5.2 release) 原文公開日: 2017/11/13 著者: Jason Kim Rails 5.2を待たずに今すぐActiveStorageを使ってみた(翻訳) DHHは今年ActiveStorageという新しいコンポーネントの導入をアナウンスしました. ActiveStorageは、写真などのアップロードをRailsで直接管理します。 以来、ActiveStorageをRailsに統合するため多くの改良が加えられ、ActiveStorageは事実上利用可能になっています。本記事では、ActiveStorageを使うためにRailsをアップデートする方法を調べてみました。 警告: bleeding edgeバージョンのRailsを使うため、見たこともないような問題が引き起こされる可能性があります。 Rails向けにActiveStorageをセットアップする 5.1.14より前のRailsを使っている場合は、Gemfileを変更して5.1.14にアップデートします。 gem ‘rails’, ‘~> 5.1’, ‘>= 5.1.4’ $ bundle update railsを実行します。 $ rails app:updateを実行してコードの差分をすべて解決します。 5.1.14へのアップグレードで問題ないことを確認します。 bleeding edgeバージョンの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://github.com/rails/arel.git’ gem ‘bootsnap’, ‘~> 1.1’, ‘>= 1.1.5’, require: false $ bundle update railsを実行します。 $ bundle exec rails -vでbleeding edgeバージョンRails 5.2.0.alphaの表示を確認します。 アプリケーションのconfigを更新し、$ bundle exec rails app:updateを実行します。 アプリ起動前に$ ./bin/rails –tasksでrails active_storage:installが実行可能タスクに表示されることを確認します。 $ ./bin/rails active_storage:installを実行し、マイグレーションファイルを生成します。 $ ./bin/rails db:migrateを実行します。これでSQliteデータベースでActiveStorageがサポートされます。 ActiveStorageでシンプルな画像をアップロードしてみる ここまではRailsアプリでActiveStorageをサポートするための準備でした。アプリでActiveSupportが使えるようになったので、ActiveStorageを使って画像のpostを作成できるようにする簡単な機能を作ってみましょう。 $ ./bin/rails g model postでPostモデルを作成します。 次のマイグレーションファイルでPostのテーブルにtitleとbodyの2つのカラムを追加します。 # 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 $ ./bin/rails g controller postsでPostsリソースのコントローラを作成します。 Postsリソースへのルーティングをconfig/routes.rbに追加します。 Rails.application.routes.draw do resources :posts end 画像とpostの関連付けが必要です。 class Post < ApplicationRecord has_many_attached :images end index、show、createアクションのコードを追加します。 # app/controllers/posts_controller.rb class PostsController < ApplicationController # postのフォームをここで表示する def index @post = Post.new end # ここでpostを作成する def create post = Post.create! params.require(:post).permit(:title, :body) post.images.attach(params[:post][:images]) redirect_to post end # 写真付きのpostをここで表示する def show @post = Post.find(params[:id]) end end … Continue reading Rails 5.2を待たずに今すぐActiveStorageを使ってみた(翻訳)