今回はユーザーが投稿した投稿にコメントをする際にYoutubeのURLを埋め込む方法を紹介します。
投稿のコントローラー:favorite(普段自分が使っているコントローラー)
コメントのコントローラー:comment
①commentsテーブルにyoutube_urlカラムを追加します。
コマンドプロンプト
rails generate migration AddYoutube_urlToComments youtube_url:string
コマンドプロンプト
rails db:migrate
②commentコントローラーに、コメント内でYoutubeのURLを埋め込むためのコードを書きます。
app/controller/comments_controller.rb
def create
favorite = Favorite.find(params[:favorite_id])
comment = favorite.comments.build(comment_params)
comment.user_id = current_user.id
#ここまでは教材でできているはず!だから特に変えなくていいよ!
url = params[:comment][:youtube_url]
url = url.last(11)
comment.youtube_url = url
#変更する所は上の3行だけ!
if comment.save
flash[:success] = "コメントしました"
redirect_back(fallback_location: root_path)
else
flash[:success] = "コメントできませんでした"
redirect_back(fallback_location: root_path)
end
end
③コメント投稿をするときにYoutube_urlを受け取るために以下のコードを書きます。
app/controller/comments_controller.rb
private
def comment_params
params.require(:comment).permit(:content, :youtube_url)#youtube_urlを追加
end
④viewページにyoutubeの動画を入れる&表示させるためのコードを挿入
app/views/favorites/show.html.erb
#省略
<div class="comment-wrapper">
<p>コメント一覧</p>
<% @comments.each do |c| %>
<div>
<%= c.user.email unless c.user.blank? %>
<br>
<%= c.content %>
<br>
<% if c.youtube_url? %> #ここから
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/<%=c.youtube_url%>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<% end %> #ここまでを追加
</div>
<br>
<% end %>
<% if user_signed_in? %>
<%= form_with(model: [@favorite, @comment], local: true) do |f| %>
<%= f.text_area :content %>
<%= f.text_field :youtube_url, :size => 140 %><br> #この1行を追加
<%= button_tag type: "submit" do %>
<i class="far fa-comments"></i> コメントする
<% end %>
<% end %>
<% end %>
</div>