我在一个视图中渲染一个分部:
<%= 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 => ""
传递到分部中,但由于分部在许多地方都被渲染,这有点痛苦。有没有更简单的方法来处理这个问题?
尝试defined?
,并不是说它真的很重要,而是它实际上是一个运算符。
<% if defined? video_id %>
我认为处理这一问题的更好方法是创建一个助手,然后管理需要馈送到分部的变量的值。类似于:
module VideoHelper
def show_video(video, options = {})
options[:id] ||= ""
render 'video', :video => video, :video_id => options[:id]
end
end
现在,您可以将其缩短为show_video调用,而不必在视图中显示较长的渲染部分行。
此外,我发现,从长远来看,这允许更大的灵活性,我不必太多考虑局部此时需要什么变量,以及它们是否被定义。
将检查更改为<% if defined? video_id %>