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を再起動を行うと画像が表示されるようになると思います。
-
前の記事
redis 全キーを取得する 2021.01.18
-
次の記事
複数のスクリーンサイズで表示確認できる「Responsively App」の使い方 2021.01.18
コメントを書く