rails6 refileを使用して画像をアップロードする

rails6 refileを使用して画像をアップロードする

rails6で、refileを使用して画像をアップロードするまでの手順を記述してます。railsのバージョンは6.1.0です。

環境

  • OS ubuntu20.10
  • ruby 2.7.2
  • rails 6.1.0
  • Postgresql 13.1 (dockerで構築)

refile導入

Gemfileに以下を追加します。

gem "refile", require: "refile/rails", github: 'manfe/refile'
gem "refile-mini_magick"

インストールを行います。

bundle install

CRUD作成

scaffoldで「CRUD」を作成してテストしてみます。

rails g scaffold car

「db/migrate」ディレクトリ配下にある、マイグレーションファイル「xxxxx_create_cars.rb」を以下のように編集します。

class CreateCars < ActiveRecord::Migration[6.1]
  def change
    create_table :cars do |t|
      t.string :name
      t.string :image_id
      t.timestamps
    end
  end
end

マイグレーションを実行します。

rails db:migrate

テーブル「cars」

コントローラー編集

「app/controllers」ディレクトリ配下にある「cars_controller.rb」の「car_params」を以下の通りに編集しておきます。

  def car_params
    params.fetch(:car, {}).permit(:name, :image)
  end

テンプレート編集

「app/views/cars」ディレクト配下にある、「_form.html.erb」に以下を追加します。

  <%= form.text_field :name %>
  <%= form.attachment_field :image %>

アップロード確認

ブラウザから http://プライベートIP or サーバーアドレス:3000/cars/new にアクセスします。

※CSSは「materialize-css」を使用しています。

タイトルとファイルを選択して「Create Car」をクリックしてアップロードを行います。

テーブル「cars」にname「foo」が追加されていることが確認できまs。

画像を確認するには「app/views/cars」ディレクト配下にある、「show.html.erb」に以下を追加します。

<%= attachment_image_tag @car, :image %>

showリンクをクリックして、確認してみます。

secret_keyが設定されていなければ、以下のエラーが発生します。

Refile.secret_key was not set.

Please add the following to your Refile configuration and restart your application:

「config/initializers」ディレクトリ配下にある「application_controller_renderer.rb」に記述されている「secret_key」をそのまま追加します。

Refile.secret_key = "a45e9df~~~~"

これでrailsを再起動を行うと画像が表示されるようになると思います。