Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将youtube视频动态嵌入rails应用程序_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如何将youtube视频动态嵌入rails应用程序

Ruby on rails 如何将youtube视频动态嵌入rails应用程序,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,因此,我有一个rails应用程序,允许用户提交youtube链接,并使用竖起拇指的gem对歌曲/链接进行排名 但是,用户必须将链接复制并粘贴到浏览器中才能收听歌曲。为了更好的用户体验,我希望将提交的YouTube链接作为视频嵌入到应用程序中。那么,如何动态地实现这一点呢 换句话说,您将能够提交YouTube链接,它将保存在例如song_id(1)中。您可以单击song_id(1),而不仅仅是看到链接,您还可以看到嵌入的YouTube视频 更新show.html.erb: <%- model

因此,我有一个rails应用程序,允许用户提交youtube链接,并使用竖起拇指的gem对歌曲/链接进行排名

但是,用户必须将链接复制并粘贴到浏览器中才能收听歌曲。为了更好的用户体验,我希望将提交的YouTube链接作为视频嵌入到应用程序中。那么,如何动态地实现这一点呢

换句话说,您将能够提交YouTube链接,它将保存在例如song_id(1)中。您可以单击song_id(1),而不仅仅是看到链接,您还可以看到嵌入的YouTube视频

更新show.html.erb:

<%- model_class = Song -%>
<div class="page-header">
  <h1><%=t '.title', :default => model_class.model_name.human.titleize %></h1>
</div>

<dl class="dl-horizontal">
  <dt><strong><%= model_class.human_attribute_name(:title) %>:</strong></dt>
  <dd><%= @song.title %></dd>
  <dt><strong><%= model_class.human_attribute_name(:url) %>:</strong></dt>
  <dd><%= YouTubeAddy.extract_video_id(@song.url) %> </dd>


<iframe width="#{width}" height="#{height}" src="http://www.youtube.com/embed/#{youtube_id}" frameborder="0"></iframe>
你可以

  • 从提交的链接中提取youtube视频的id

    例如,有人提交此链接

    您需要
    XwmtNk_Yb2Q

  • 使用该id可以渲染嵌入视频的
    iframe
    元素


  • 这就是它在中的实现方式。

    我提出了一个要点,并将其转换为一个适当的Ruby类,该类支持和的嵌入url生成和/或iframe生成

    用法

    url = 'https://youtu.be/OaDhY_y8WTo'
    generator = VideoEmbedUrlGenerator.new(url)
    
    generator.construct_url
    #=> "https://www.youtube.com/embed/OaDhY_y8WTo"
    
    generator.construct_iframe
    #=> "<iframe width=\"640\" height=\"480\" frameborder=\"0\" allow=\"autoplay; fullscreen\" allowfullscreen, src='https://www.youtube.com/embed/OaDhY_y8WTo'></iframe>"
    
    url='1〕https://youtu.be/OaDhY_y8WTo'
    生成器=VideoEmbedUrlGenerator.new(url)
    generator.construct\u url
    #=> "https://www.youtube.com/embed/OaDhY_y8WTo"
    generator.construct_iframe
    #=> ""
    

    可以在此处找到实现:

    您可以将youtube视频或vimeo视频url保存为歌曲表中视频列中的字符串。因此,要在显示页面中显示视频,您需要将视频与视频ID一起嵌入。因此,假设您有一个带有视频列ok的歌曲表。最初创建歌曲时,用户会添加youtube url或vimeo url。很好,现在你的数据库中有了整个字符串。有许多不同的视频URL,如.be和featured等,因此最好将它们全部覆盖,并消除误差

    使用regex,您应该做一些事情,检查提供者并提取ID。因此,您可以转到帮助者并在模块中添加以下内容,也可以将其添加到帮助者

    因此您的
    应用程序\u helper.rb
    可以如下所示:

    module ApplicationHelper
      def video_embed(video_url)
    
        # REGEX EXTRACT VIDEO ID
        regex_id = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/|vimeo\.com\/)([a-zA-Z0-9_-]{8,11})/
        match_id = regex_id.match(video_url)
        video_id = ""
        if match_id && !match_id[1].blank?
          video_id = match_id[1]
        end
    
        # REGEX EXTRACT PROVIDER - YOUTUBE OR VIMEO
        regex_prov = /(youtube|youtu\.be|vimeo)/
        match_prov = regex_prov.match(video_url)
        video_prov = ""
        if match_prov && !match_prov[1].blank?
          video_prov = case match_prov[1]
                         when "youtube"
                           :youtube
                         when "youtu.be"
                           :youtube
                         when "vimeo"
                           :vimeo
          end
        end
    
        case video_prov
          when :youtube
            "https://www.youtube.com/embed/#{video_id}"
          when :vimeo
            "https://player.vimeo.com/video/#{video_id}"
        end
    
      end
    end
    
    <div class="embed-responsive embed-responsive-16by9">
      <iframe class="embed-responsive-item" src="<%= video_embed(@song.video) %>" allowfullscreen></iframe>
    </div>
    
    现在在你看来。假设
    songs/show.html.erb
    您只需调用该方法。

    <iframe width="#{width}" height="#{height}" src="<%= video_embed(@song.video) %>" frameborder="0"></iframe>
    
    
    
    如果您使用的是bootstrap,那么就更好了,您可以像这样使用所有很棒的bootstrap类:

    module ApplicationHelper
      def video_embed(video_url)
    
        # REGEX EXTRACT VIDEO ID
        regex_id = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/|vimeo\.com\/)([a-zA-Z0-9_-]{8,11})/
        match_id = regex_id.match(video_url)
        video_id = ""
        if match_id && !match_id[1].blank?
          video_id = match_id[1]
        end
    
        # REGEX EXTRACT PROVIDER - YOUTUBE OR VIMEO
        regex_prov = /(youtube|youtu\.be|vimeo)/
        match_prov = regex_prov.match(video_url)
        video_prov = ""
        if match_prov && !match_prov[1].blank?
          video_prov = case match_prov[1]
                         when "youtube"
                           :youtube
                         when "youtu.be"
                           :youtube
                         when "vimeo"
                           :vimeo
          end
        end
    
        case video_prov
          when :youtube
            "https://www.youtube.com/embed/#{video_id}"
          when :vimeo
            "https://player.vimeo.com/video/#{video_id}"
        end
    
      end
    end
    
    <div class="embed-responsive embed-responsive-16by9">
      <iframe class="embed-responsive-item" src="<%= video_embed(@song.video) %>" allowfullscreen></iframe>
    </div>
    
    
    
    也许你可以试试,我已经更新了我的立场,我做错了什么?:)使用
    符号代替
    {@foo}
    我已经更新了我的立场,我做错了什么?:)我还忘了说,当用户在视图中创建歌曲时。在“歌曲输入”字段中,让您的用户知道如何添加视频的完整url,有些用户可能会添加没有url的视频id,这可能是一个问题。