ネストしたindexへの動画埋め込み備忘録
https://qiita.com/Kairi_Yasunnde/items/8e931a4670549ba8237e
上記の記事を参考にしたが、自分はgroupテーブルにYoutube_urlを入れてcreateに定義し、groupでネストしたmessages/indexに埋め込もうとして、コントローラーの差異があり出来なかったと推測する。
routes.rb
resources :groups, only: [:new, :create, :edit, :update, :show, :destroy] do
resources :messages, only: [:index, :create, :destroy]
end
なのでYoutube_urlを生値のまま取り出し、ビュー上で末尾11桁をとり出すようにした。
※Youtubeは末尾11桁の文字、数字が各動画に割り当てられている。
手順
まずは、groupにYoutube_urlのカラムを追加する。
ターミナル上で、groupテーブルにyoutube_urlをstring型でカラムを追加。↓
rails g migration AddYoutube_urlToGroups youtube_url:string
追加後、rails db:migrateで実行
次に、コントローラーでYoutube_urlの値をpermitで許可する↓
groups_controller.rb
private
def group_params
params.require(:group).permit(:name, :image, :content, :youtube_url, user_ids: [])
end
createまたはupdateアクションでurlをテーブルに入れたいのでフォームを作る↓
※_formはnewとeditアクションの部分テンプレート
groups/_form.html.erb
<%= f.text_field :youtube_url, class: "form-control", placeholder: "Youtube_url" %>
そして、ビュー上で末尾11桁の値をlastメソッドで取り出し、Youtube動画埋め込みのテンプレートにはめこむ↓
<%=(@groups.youtube_url).last(11)%>の部分
messages/index.html.erb
<iframe width="560" height="315" src="https://www.youtube.com/embed/<%=(@groups.youtube_url).last(11)%>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
以上で埋め込み完了
createまたはupdateアクションで入力したurlの動画が埋め込まれる