2011-05-25 28 views
7

我渲染的部分在一個視圖中:處理未定義的變量

<%= render 'video', :video => @video, :video_id => 'video_show_id' %> 

和有這樣的代碼在部分:

<% if video_id %> 
    <%= link_to "video", video.video_url, :class => "oembed", :id => video_id %> 
<% else %> 
    <%= link_to "video", video.video_url, :class => "oembed" %> 
<% end %> 

的問題是,這種部分被在許多地方呈現在我的應用程序和其他視圖中,我不想將:video_id轉換爲部分內容。因此我的應用程序拋出一個錯誤,video_id未定義。我可以通過:video_id => ""進入部分在其他意見,但由於局部渲染在許多地方,這是一種痛苦。有沒有更簡單的方法來處理這個問題?

回答

15

嘗試defined?而不是它真的很重要,但它實際上是一個operator

<% if defined? video_id %> 
1

更改支票<% if defined? video_id %>

3

我認爲更好的方式來處理,這是創建一個幫手然後管理的需要輸送到局部變量的值。喜歡的東西:

module VideoHelper 

    def show_video(video, options = {}) 
    options[:id] ||= "" 
    render 'video', :video => video, :video_id => options[:id] 
    end 

end 

現在,而不必有長使局部線在你看來,你得到它縮短到show_video電話。

另外,我發現從長遠來看,這允許更多的靈活性,我不得不少思考當前部分需求的變量以及它們是否被定義。