nil:NilClass 的未定义方法`last' for youtube embed in rails

undefined method `last' for nil:NilClass for youtube embed in rails

我正在尝试在我的 rails 应用程序中嵌入一个 YouTube 视频,并且正在关注 this guide:

我写了这个助手:

  def embed(video)
    youtube_id = @page.video.try(:split, "=").last || 'blank'
    content_tag(:iframe, nil, src: "//www.youtube.com/embed/#{youtube_id}")
  end

我收到此错误:nil:NilClass

的未定义方法“last”

这是我的观点:pages/show.html.erb

    <div class="embed-container">
      <%= embed(@page.video) %>
    </div>

该指南似乎非常简单明了,所以我不确定为什么我的原始版本不起作用。

我原来的帮手是这样的:

  def embed(video)
    youtube_id = video.split("=").last 
    content_tag(:iframe, nil, src: "//www.youtube.com/embed/#{youtube_id}")
  end

但它引发了另一个错误:undefined method `split' for nil:NilClass

went here 发现我认为可能是一个解决方案,但它导致了上面的新错误。我还尝试添加 @page.video.split 而不仅仅是视频,因为它是特定页面的显示视图,但我不确定这是否有所不同。

关于如何让它工作有什么建议吗?

您正在访问助手中的 @page 实例变量,但您也将其作为参数发送。

def embed(video)
  youtube_id = video.try(:split, "=").last || 'blank'
  content_tag(:iframe, nil, src: "//www.youtube.com/embed/#{youtube_id}")
end

<div class="embed-container">
  <%= embed(@page.video) %>
</div>

话虽如此,问题是您的 @page.video 返回的是 nil 而不是视频 URL 字符串,我猜...确保 @page.video returns 某事。