Carrierwave

rails new carrierwave sample -d postgresql -T

rails db:create

 

gemを追加

gem "carrierwave"

bundle install

 

アップローダークラスの作成

rails g uploader video

rails g uploader アップローダー名

 

app/uploader/video_uploader.rb

以下をコメントインして、MOV wmv mp4を追加

def extension_allowlist
%w(jpg jpeg gif png MOV wmv mp4)
end

 

scaffoldを使用してPostモデルとtitle、videoカラムを作成

rails g scaffold Post title:string video:string

rails db:migrate

 

Postモデルにアップローダークラスとカラムの紐付け

app/models/post.rb

class Post < ApplicationRecord
 mount_uploader :video, VideoUploader
end

※mount_uploader :カラム名, アップローダークラス

 

バリデーションの設定(app/models/post.rbに追記)

class Post < ApplicationRecord
 mount_uploader :video, VideoTopUploader

 validates :title, :video, :presence => true
end

 :presence => true 空白を許可しない

 

viewの編集

今回はscaffoldを使用しているのでレンダリングを編集していますが、自作の場合などはapp/views/posts/new.html.erbを編集

_form.html.erb

<div class="field">
 <%= form.label :video %>
 <%= form.text_field :video %> #これを↓に書き換え
 <%= form.file_field :video, :accept => "video/*" %>
</div>

 ※file_fieldに書き換えることで、ファイル選択ができるようになる

 ※"video/*"で動画ファイルを選択できる

   画像ファイルを指定したい時は"image/*"

 

動画をGit管理下から除外(commitやpushの際のデータ量が多すぎてしまうため)

.gitignore

#略

/public/packs
/public/packs-test
/node_modules
/yarn-error.log
yarn-debug.log*
.yarn-integrity

/public/uploads ←これを追記

 

ここまでで動画のアップロードができるようになっている

 

動画の再生

詳細ページ(show)にて再生の方法

app/views/posts/show.html.erb

<p>
<strong>Video:</strong>
#以下を書き換え
<%= video_tag@post.video.url, :controls => true %>
</p>

video_tag:動画ファイルの呼び出し

post.video.url:動画の保管場所にアクセス

controls => true:手動再生オプションを追加(YouTubeのような感覚)

 

再生画面のサイズ設定

カメラで撮影したものなどはブラウザ上でものすごく大きく表示されてしまったりするので、任意のサイズに縮小

app/views/posts/show.html.erb

<p>
<strong>Video:</strong>
<%= video_tag@article.video.url, height: 400, width: 600, :controls => true %>
</p>
↑   ここを追記   ↑

 ※数値は自由に設定可