質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

6233閲覧

railsで、文字列中のyoutubeのURLを自動でiframe表示に変えるやり方がわかりません。ご教授お願いします。

Taka624

総合スコア40

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

1クリップ

投稿2016/02/20 09:48

編集2016/02/20 10:29

ユーザが投稿したPostのテキスト(content)の中のyoutubeのurlを検知して、埋め込み表示にしたいと思っております。

if @post.content.match(/https:\/\/www.youtube.com\/watch\?v=(\w+)/) video_id = params[:youtube_url].match(/https:\/\/www.youtube.com\/watch\?v=(\w+)/)[1] video_src = "https://www.youtube.com/embed/#{@music.youtube.video_id}"

とすると、もしyoutubeのurlがあった場合、videoのidを取り出して埋め込み用のurlを生成するところまではできると思うのですが、その後どうしたらいいかがわかりません。

最終的には、
「◯◯◯url△△△。」
という文字列を
「◯◯◯<iframe src"<%= video_url %>"></iframe>△△△。」
というような内容に変換してviewファイルの方に書きたいと思っています。

posts_controller.rb

def create @post.create(post_params) if @post.content.match(/https:\/\/www.youtube.com\/watch\?v=(\w+)/) video_id = params[:youtube_url].match(/https:\/\/www.youtube.com\/watch\?v=(\w+)/)[1] video_src = "https://www.youtube.com/embed/#{@music.youtube.video_id}"

この下にどのように記述し、viewの方で想定通りに表示するにはどのように記述するのがスマートでしょうか?

それとも別のやり口がありましたら教えていただければ幸いです。

御教授願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、viewでの表示の仕方ですが、createメソッドには対応するviewを持っていないので、
show.html.erb など別の場所に記述する必要があります。デフォルトでは、createを実行したあとは、showの画面へ遷移します(データは持ち越さない)。もし、整形したデータを保存しないのであれば、createの中で整形データを生成する必要は無いかと思います。表示の際に、整形して出力するほうが処理が重複してしまわずに楽かと思います。

データを整形せずに保存した場合の記述場所
createメソッドの中には整形処理を書かない。

showメソッドの中で整形処理を記述する。

Ruby

1@content_with_frame = @post.content.gsub(/https:\/\/www.youtube.com\/watch\?v=(\w+)/){"<iframe src='#{$1}'></iframe>"} #@でviewに持ち出せる

整形したcontentを表示する。
views/posts/show.html.erb

Ruby

1<%= @content_with_frame %>

gsub参考

---編集しました。
安直にするなら、ベタで書いてはどうでしょうか。
見当違いならすみません。

video_frame = "<iframe src='https://www.youtube.com/embed/#{@music.youtube.video_id}'></iframe>"

投稿2016/02/20 10:03

編集2016/02/20 14:23
miyamiya

総合スコア691

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Taka624

2016/02/20 10:36

ご回答ありがとうございます。 そちらの書き方もあるのだとは思いました、しかし一番お聞きしたいところは、 コントローラになんと書いて、viewでどのように表現するのかという部分なのですが、そこに対するアドバイスがあればお願い致します。
miyamiya

2016/02/20 14:24

編集で表現場所を追加しました。
Taka624

2016/02/21 08:47

とてもご丁寧に、本当に助かります!! わかりやすい解説をありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問