Ruby on rails 无法使用iframe在show中呈现youtube视频

Ruby on rails 无法使用iframe在show中呈现youtube视频,ruby-on-rails,iframe,Ruby On Rails,Iframe,我有video:用户在一个名为video的类中输入的字符串,它是一个youtube链接 我的iframe一直给我错误“没有将nil隐式转换为字符串”。这是我的密码 我的视频/show.html.erb <div class="row"> <div class="span8"> <h3>Videos</h3> <ol class="video"> &l

我有video:用户在一个名为video的类中输入的字符串,它是一个youtube链接

我的iframe一直给我错误“没有将nil隐式转换为字符串”。这是我的密码

我的视频/show.html.erb

<div class="row">
    <div class="span8">
            <h3>Videos</h3>
            <ol class="video">
                <iframe width="560" height="349" src="<%= "http://www.youtube.com/embed/"+@video.code %>"></iframe>
            </ol>
    </div>
</div>
我的视频控制器:

def show
    @video = Video.find(params[:id])
end

引发此错误是因为
@video.code
返回nil,Ruby尝试将字符串与nil合并,导致错误“没有将nil隐式转换为字符串”

要解决此问题,您可以在代码方法中返回一个空字符串,而不是nil:

def code
  self.video.try(:split, '/').try(:last) || ''
end
此代码将拆分“/”上的视频链接,如果存在,则返回最后一个,如果不存在,则返回空字符串

需要记住的是:在任何情况下,您的方法都应该返回相同类型的对象。如果您的方法应该返回一个字符串,在任何情况下都不要返回
nil
,请返回一个空字符串,并使用
.present?

例如:

# helper
def pretty_fullname(user)
  if user.nil?
    return ""
  else
    return "#{user.first_name} #{user.last_name}"
  end
end

# view
<h1><%= "Welcome " + pretty_fullname(@user) %></h1>
# This won't raise an error is user is nil.
#助手
def pretty_全名(用户)
如果user.nil?
返回“”
其他的
返回“#{user.first_name}{user.last_name}”
结束
结束
#看法
#如果用户为零,则不会引发错误。

引发此错误是因为
@video.code
返回nil,Ruby尝试将字符串与nil合并,导致错误“没有将nil隐式转换为字符串”

要解决此问题,您可以在代码方法中返回一个空字符串,而不是nil:

def code
  self.video.try(:split, '/').try(:last) || ''
end
此代码将拆分“/”上的视频链接,如果存在,则返回最后一个,如果不存在,则返回空字符串

需要记住的是:在任何情况下,您的方法都应该返回相同类型的对象。如果您的方法应该返回一个字符串,在任何情况下都不要返回
nil
,请返回一个空字符串,并使用
.present?

例如:

# helper
def pretty_fullname(user)
  if user.nil?
    return ""
  else
    return "#{user.first_name} #{user.last_name}"
  end
end

# view
<h1><%= "Welcome " + pretty_fullname(@user) %></h1>
# This won't raise an error is user is nil.
#助手
def pretty_全名(用户)
如果user.nil?
返回“”
其他的
返回“#{user.first_name}{user.last_name}”
结束
结束
#看法
#如果用户为零,则不会引发错误。

使用新的“def code”后,我仍然收到相同的错误。code方法应在视频模型中实现,或应接收视频对象作为参数。在助手中引用
self
并不是指实例化的对象,而是指上下文!成功了!!!youtube视频呈现。我在youtube上看到一个错误,说“发生了一个错误”。请稍后再试“,但现在我更接近了!谢谢:)也解决了这个问题。你太棒了,Yoshi。如果没有你,网络/现实/马里奥世界将是一个悲伤的地方。在使用新的“def code”后,我仍然会收到相同的错误。code方法应该在视频模型中实现,或者应该接收视频对象作为参数。在助手中引用
self
并不是指实例化的对象,而是指上下文!成功了!!!youtube视频呈现。我在youtube上看到一个错误,说“发生了一个错误”。请稍后再试”,但现在我离你更近了一步!谢谢:)也解决了这个问题。你太棒了,Yoshi。没有你,网络/现实/马里奥世界将是一个悲伤的地方