I wanted to embed and display youtube videos on rails, so I tried to implement it by referring to various articles. However, I couldn't implement it as I envisioned according to the reference article. After that, I repeated trial and error and found out how to generate the URL entered on the edit screen without any bugs, so I will describe how to implement it.
Youtube videos are identified by 11-digit character strings. If you paste the 11-digit character string into the URL for embedding on youtube, the embedded video will be displayed on rails as well.
https://www.youtube.com/watch?v=0CqFEDzDkIA&t
Identify the video with this character string → → "0CqFEDzDkIA & t"
However, there is a big pitfall here. As a condition for the above URL to be generated, the above URL will be generated only when youtube video starts from 0 seconds </ font>. If this condition is not met, a longer URL will be generated, so even if you create it according to Reference article, the embedded video will be displayed. There will be a bug that will not be done.
If the URL meets the criteria, it will be played correctly in Reference article.
** If you get the youtube URL by the following method, a URL longer than the 11-character code for video identification will be generated **
-URL of the video that stopped playing the video --URL of the video playing the video in a special situation (Example: Get the URL from the playback screen of your favorite video, etc.) </ Font> (There may be others, but in any case the URL will be generated in the longer direction)
Based on these, we will explain the implementation setup.
First, we will create a sample app that just posts YouTube videos.
Terminal operation
$ mkdir projects //Prepare your own directory
$ cd projects
$ mkdir sample_app
$ cd sample_app
$ $ rails new youtubetest -d mysql
If you want to specify the version, enter as follows
rails -5.2.3- new youtubetest -d mysql
$ rails s
Start the server. Go to http: // localhost: 3000 to see if you were able to launch the server. If the usual image appears, the startup is complete.
I often write in Haml, so I'll introduce gem'haml-rails'
.
gemfile
gem 'haml-rails'
After installation, please lower rails ** lower </ font> ** and bundle install
.
Describe the routing.
routes.rb
Rails.application.routes.draw do
root to: 'products#index'
resources :products, only: [:index, :new, :create,:edit ,:update, :destroy]
end
Create a controller.
Terminal
$ rails g controller products
Add the following to the products controller.
class ProductsController < ApplicationController
def index
@products = Product.all
end
def new
@product = Product.new
end
def create
product.create(product_params)
redirect_to root_path
end
def destroy
product = Product.find(params[:id])
product.destroy
end
def edit
@product = Product.find(params[:id])
end
def update
product = Product.find(params[:id])
product.update(product_params)
end
private
def product_params
params.require(:product).permit(:name, :youtube_url)
end
end
Create a model.
Terminal
$ rails g model product
Add the following to the migration file
db/migrate/xxxxxxxxxxxxxx_create_products.rb
class CreatePosts < ActiveRecord::Migration[5.2]
def change
create_table :products do |t|
t.text :name #add to
t.string :youtube_url #add to
t.timestamps
end
end
end
Let's do rails: db: migrate
.
Terminal
$ rails db:migrate
** Preparation is complete ** ** This is the most important process! !! ** **
Create a view file for the top screen. Please enter the following command.
Terminal
$ touch app/views/products/index.html.haml
$ touch app/views/products/new.html.haml
$ touch app/views/products/edit.html.haml
* Please type in order from the top
Create a view file for the top screen. Add the following code to ʻindex.html.haml`.
ruby:index.html.haml
.contents
- @products.each do |product|
.content_post
= product.name
.content_post
%iframe{src: "https://www.youtube.com/embed/#{product.youtube_url[32..42]}",allow: "accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture", allowfullscreen: "", frameborder: "0", height: "315", width: "560"}
The code below is the base code for the embed code.
https://www.youtube.com/embed/
By adding # {post.youtube_url [32..42]}
to the end of this code, even URLs generated in an irregular state can be played normally.
Supplementary explanation
%iframe{src: "https://www.youtube.com/embed/#{product.youtube_url[32..42]}", Omitted below}
#Add the code below
"#{product.youtube_url[32..42]}"
#Obtained an 11-digit character string that identifies the video
Next, create a view of the post screen and edit screen.
Add the following code to new.html.haml and ʻedit.html.haml
(It is okay to use a partial template in this process)
ruby:new.html.haml&edit.html.haml
.new-contents
.new-contents__content
= form_with(model: @product, local: true) do |form|
contents-group
= form.label :name, "name"
= form.text_field :name, placeholder: 'name'
contents-group
= form.label :youtube_url, "YouTube URL"
= form.text_field :youtube_url, placeholder: 'youtube_url'
= f.submit 'Post'
** This is the end !! ** By adding a little description to the embed code, you can embed the video correctly in any URL (limited to youtube) and you can play the video.
This concludes the explanation of "How to embed and display youtube videos in Rails". I would appreciate it if you could point out any mistakes.
Thank you for watching until the end.
Recommended Posts