Ruby on rails Rails中nil:NilClass的未定义方法“split”
每当运行这段代码且值不存在时,我总是收到nil:NilClass的错误消息undefined method'split':Ruby on rails Rails中nil:NilClass的未定义方法“split”,ruby-on-rails,ruby,Ruby On Rails,Ruby,每当运行这段代码且值不存在时,我总是收到nil:NilClass的错误消息undefined method'split': 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: '10
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
这是带有parse的行。我想,试试就能解决它。我甚至使用了.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'
问题在于:
CGI.parse(uri.query)
query为nil,解析方法尝试拆分它
如果要在值不存在时返回nil,请将该行替换为:
CGI.parse(uri.query).try(:[], 'v') if uri.query
完整的代码更新了答案
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
当将if uri.query应用到CGI.parse的末尾时,它解决了拆分问题,但在uri.path上出现了一个问题,因此重复了答案 显示堆栈跟踪。url和uri.query的值。而且,这个异常处理程序很奇怪。不确定您希望用它实现什么。嗯,stacktrace的第一行不在CGI.parse或更深层?有趣的无论如何,问题似乎在于@region.youtube\u url中的坏数据。它有什么价值?这不是一个真正的Ruby问题。这是一个确定当URL丢失时您希望发生什么的问题。实际上,相同的响应。实际上,我们正准备尝试类似的操作。由于OP显然不知道如何处理nil,因此从这里返回nil只会使问题远离根本原因。