【问题标题】:Handling an undefined variable处理未定义的变量
【发布时间】:2011-09-02 02:30:06
【问题描述】:

我在一个视图中渲染局部:

<%= 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 =&gt; "" 传递到其他视图中的部分,但由于部分在许多地方呈现,这有点痛苦。有没有更简单的方法来处理这个问题?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 partial-views


    【解决方案1】:

    试试defined?,这并不重要,但实际上是operator

    <% if defined? video_id %>
    

    【讨论】:

      【解决方案2】:

      把支票改成&lt;% if defined? video_id %&gt;

      【讨论】:

        【解决方案3】:

        我认为处理这个问题的更好方法是创建一个助手,然后管理需要馈送到部分的变量的值。比如:

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

        现在,您不必在视图中显示较长的渲染部分行,而是将其缩短为 show_video 调用。

        此外,我发现从长远来看,这可以带来更大的灵活性,并且我不必考虑此时部分需要哪些变量以及它们是否已定义。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-05
          • 2021-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-08
          • 1970-01-01
          相关资源
          最近更新 更多