1

我有视频:用户在一个名为 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>

我的助手/VideosHelper:

def code
    self.video.split('/').last if self.video
end

我的视频控制器:

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

1 回答 1

1

引发此错误是因为 @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.
于 2013-09-17T15:29:25.667 回答