[RUBY] [Rails] Videos mit Rails hochladen (ActiveStorage)

Ich besuche derzeit eine Programmierschule und bin in die Portfolio-Produktionsphase übergegangen. Ich wollte so etwas wie Insta Stories machen, mit denen ich kurze Videos posten kann, aber ich hatte Angst, dass es weniger Artikel zum Hochladen von Videos gibt als erwartet, also werde ich es schreiben, damit ich es diesmal nicht vergesse.

Referenzseite

Verwenden Sie Active Storage

Ursprünglich dachte ich darüber nach, es mit Carrierwave usw. zu implementieren, aber als ich es untersuchte, schien es, dass das Hochladen von Dateien mit der Standardfunktion von Rails erfolgen kann, daher werde ich es hier implementieren. Ich bin ein Anfänger, der ActiveStorage heute kennt. Weitere Informationen finden Sie in den Artikeln anderer Personen. Ich werde den Fluss dem Video-Posting überlassen. Dies ist ein Zitat von einer Referenzseite.

Eine in Rails 5.2 hinzugefügte Funktion zum Hochladen von Dateien. Mit dieser Funktion können Sie ganz einfach eine Bildposting-Funktion usw. mit einem Formular erstellen. Sie können Dateien auch problemlos in Cloud-Speicherdienste wie Amazon S3, Google Cloud Storage und Microsoft Azure Storage hochladen. Neben dem Cloud-Speicher können Sie auch Dateien auf Ihrer lokalen Festplatte speichern.

Installieren Sie Active Storage

$ rails active_storage:install
$ rails db:migrate

Es werden zwei Tabellen erstellt, "active_storage_blobs" und "active_storage_attachments". Diese beiden werden so weitermachen, wie sie sind.

Modell erstellen

Dieses Mal erstellen wir einfach ein Modell namens "Video". Ich habe "Titel" und "Einführung" in der Spalte erstellt. Ich habe hier keine Spalte für das Video selbst erstellt.

$ rails g resource video title:string introduction:text
$ rails db:migrate

Dieses Mal gehen wir davon aus, dass Sie jeweils ein Video veröffentlichen können. Schreiben Sie "has_one_attached" in das "Video" -Modell.

/app/models/video.rb


class Video < ApplicationRecord
  has_one_attached :video
end

: video ist der Name der Datei, und es scheint, dass Sie ihr je nach Zweck einen beliebigen Namen geben können. (Wenn Sie ein Bild hochladen, z. B. : image)

Controller erstellen

Ich werde es in den Video-Controller schreiben.

/app/controllers/videos_controller.rb


class VideosController < ApplicationController

  def new
    @video = Video.new
  end

  def create
    @video = Video.new(video_params)
    @video.create
    redirect_to @video
  end

  def show
    @video = Video.find(params[:id])
  end

  private

  def video_params
    params.require(:video).permit(:title, :introduction, :video)
  end
end

Das "Video" -Modell hat keine ": Video" -Spalte, dies entspricht jedoch "has_one_attaches: video". Diesmal ist es ein Test, um zu sehen, ob Sie ein Video veröffentlichen können, sodass nur eine neue Show zum Erstellen geschrieben wird.

Ansicht erstellen

Schreiben Sie das Postformular mit neu.

/app/views/videos/new.html.erb


<%= form_with model: @video, local: true do |form| %>
  <p>title</p><%= form.text_field :title %> <br>
  <p>introduction</p><%= form.text_area :introduction %> <br>
  <p>video</p><%= form.file_field :video %> <br>
  <%= form.submit %>
<% end %>

スクリーンショット 2020-09-02 14.26.29.png Ich denke, dass das Posting-Formular so erstellt wurde. Wir werden auch eine Show-Seite erstellen.

/app/views/videos/show.html.erb


<% if @video.video.attached? %>
  <p><%= @video.title %></p> <br>
  <p><%= @video.introduction %></p>
  <%= video_tag rails_blob_path(@video.video) %>
<% end %>

Sie können überprüfen, ob @video ein Video mit ".attached?" Hat.

Wenn Sie einfach "<% = video_tag @ video.video%>" schreiben, scheinen Sie nach Daten in Richtung "/ app / assets /" zu suchen, und es wird ein Fehler in der Asset-Pipeline angezeigt. Schreiben wir rails_blob_path.

スクリーンショット 2020-09-02 14.34.49.png

Es wird jetzt angezeigt. Das Video wird nicht abgespielt, wenn es unverändert bleibt. Schreiben Sie "<% = video_tag%>" in "

/app/views/videos/show.html.erb


<% if @video.video.attached? %>
  <p><%= @video.title %></p> <br>
  <p><%= @video.introduction %></p>
  <video src="<%= rails_blob_path(@video.video) %>" type="video/mp4" controls></video>
<% end %>

control erstellt automatisch eine Schnittstelle, die die Verwendung des Videos vereinfacht. Jetzt können Sie das Video hochladen, anzeigen und sogar abspielen.

スクリーンショット 2020-09-02 14.46.28.png

Ich mache eigentlich keine Spalten, also werde ich sie auflisten, aber wird es funktionieren? Ich werde posten, wenn wieder etwas passiert.

wichtiger Punkt

Da wir dieses Mal ein Portfolio erstellen, wird davon ausgegangen, dass das Video in Anbetracht der Bereitstellung freies Material und kurz ist, etwa einige Sekunden. Lange Videos sind groß, daher scheint es eine große Sache zu sein, wenn Sie versuchen, dies lokal oder im Netzwerk zu tun. (Die Schulleute haben mich gewarnt, es auf das notwendige Minimum zu beschränken) Es scheint eine Methode wie die Verwendung von AWS S3 zu geben, obwohl eine Nutzungsgebühr erhoben wird (obwohl ich mit diesem Bereich noch nicht vertraut bin). Ich hoffe, wenn Sie ein Anfänger wie Sie sind, werden Sie denken, dass es eine solche Methode gibt.

Recommended Posts

[Rails] Videos mit Rails hochladen (ActiveStorage)
Laden Sie einfach mehrere Bilder mit Rails Rails + Carrierwave + Cloudinary hoch
[Ruby on Rails] Hochladen mehrerer Bilder mit Refile
[Rails 6] Laufzeitfehler mit $ Rails s
Gerät mit Schienen handhaben
[Rails] Lernen mit Rails Tutorial
[Schienen] Test mit RSpec
[Rails] Entwicklung mit MySQL
Unterstützt Mehrsprachigkeit mit Rails!
[Rails] Polymorph mit graphql-rubin ausdrücken
[Vue Rails] "Hallo Vue!" Wird mit Vue + Rails angezeigt
Japanisieren Sie mit i18n mit Rails
Vorbereitung für die Entwicklung mit Rails
Datei-Upload mit Spring Boot
Rails Active_storage - Vereinfachen Sie das Speichern von Bildern -
Führen Sie Rails immer im Docker aus
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
Verwenden Sie mit Rails 6.0 mehrere Datenbanken
[Rails] Geben Sie das Format mit link_to an
[Docker] Wird immer mit Docker + Rails verwendet
Erstellen Sie ein Portfolio mit Rails + Postgres SQL
[Schienen] Getriebe mit LINE Bot schieben
[Rails] Pagenation mit Ajax kompatibel machen
[Grover] PDF mit Rails generieren [Version 2020]
[Rails] Erste Datenerstellung mit Seed
Rails6 OmniAuth activestorage Benutzerbild abrufen
Strg-Z funktioniert, es gibt also eine Möglichkeit zu unterbrechen und zu töten: Dies ist mühsam und kann den falschen töten. Sie können dies in ein Python-Skript schreiben. Verfolgen Sie Rails-App-Fehler mit Python, C-Erweiterung Sentry
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
Stellen Sie mit dem iPhone eine Verbindung zum Rails-Server her
Erstellen Sie meine Seite mit Rails
Einführung in React to Rails mit React-Rails
[Rails] Erste Dateneingabe mit seed_fu!
Zeitlose Suche mit Rails + JavaScript (jQuery)
[Schienen] Machen wir einen Unit-Test mit Rspec!