1

YouTube リンクである Video:string というクラスにユーザーが入力する video:string があります。

私のiframeは、「nilからStringへの暗黙的な変換はありません」というエラーを出し続けます。これが私のコードです。

私の動画/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 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 に答える