每当运行此部分代码且值不存在时,我都会收到错误消息undefined method 'split' for nil:NilClass
:
module VideosHelper
def youtube_embed(url, **kwargs)
uri = URI('//www.youtube.com/embed/')
uri.path += find_youtube_id(url).join("','")
options = {
src: uri.to_s,
width: '100%',
height: '350px',
frameborder: 0,
allowfullscreen: true
}
content_tag(:iframe, nil, options.merge(kwargs), false)
end
def find_youtube_id(url)
uri = URI(url)
CGI.parse(uri.query).try(:[], 'v')
rescue URI::InvalidURIError
nil
end
end
具体来说就是解析这一行。我以为.try会解决它。我甚至使用.fetch而不是.try,同样的问题仍然存在。
编辑:包含在帮助文件的完整代码中。最初在find_youtube_id方法中,我实际上在救援后只有零并且正在弄乱它。
以下是我的终端
中的内容.container.video-section
.row.video-group
.col-md-8
- unless @region.youtube_url.nil?
= youtube_embed(@region.youtube_url)
.col-md-3.offset-md-1.sales-group.text-center
.manager-single
= image_tag @region.staff_photo.url, class: 'img-fluid'
app/helpers/videos_helper.rb:17:in `find_youtube_id'
app/helpers/videos_helper.rb:4:in `youtube_embed'
app/views/regions/show.html.slim:74:in `block in _
app_views_regions_show_html_slim__295776519867909611_70169935841560'
app/views/regions/show.html.slim:5:in `_
app_views_regions_show_html_slim__295776519867909611_70169935841560'
app/controllers/regions_controller.rb:14:in `show'
答案 0 :(得分:1)
问题在于:
CGI.parse(uri.query)
uri.query
为nil
,parse
方法尝试拆分它。
如果您想在值不存在时返回nil
,请将该行替换为:
CGI.parse(uri.query).try(:[], 'v') if uri.query
答案 1 :(得分:0)
完整代码更新了答案。
module VideosHelper
def youtube_embed(url, **kwargs)
uri = URI('//www.youtube.com/embed/')
uri.path += find_youtube_id(url).join("','") if uri.query
options = {
src: uri.to_s,
width: '100%',
height: '350px',
frameborder: 0,
allowfullscreen: true
}
content_tag(:iframe, nil, options.merge(kwargs), false)
end
def find_youtube_id(url)
uri = URI(url)
CGI.parse(uri.query).try(:[], 'v') if uri.query
rescue URI::InvalidURIError
nil
end
end
当将uri.query应用到CGI.parse的末尾时,它解决了拆分问题但在uri.path上出现了问题,因此重复了答案。