部分视图中未使用的变量需要显式设置为nil

时间:2015-04-02 23:48:59

标签: ruby-on-rails

我这样做是为了构建面包屑指示:

  .header-section
    %ul.breadcrumb.breadcrumb-top
      %li
        %i.fa.fa-home
      -if !level1.nil?
        %li
          =level1
      -if !level2.nil?
        %li
          =level2

level2并不总是被使用。但是,当我打电话给我这样的部分时,我就是这样:

= render :partial => 'layouts/info_header', :locals => {:title => 'Your clients', :level1 => link_to('Clients', clients_path) }

我收到此错误消息:

undefined local variable or method `level2'

我需要这样称呼它来避免它:

= render :partial => 'layouts/info_header', :locals => {:title => 'Your clients', :level1 => link_to('Clients', clients_path), :level2 => nil }

这是为什么?如果没有使用,我不想明确地将nil指定给level2。

2 个答案:

答案 0 :(得分:1)

您无法在未定义的变量上调用nil?。试试defined?

- if defined?(level2) && !level2.nil?
    %li
        = level2

答案 1 :(得分:1)

另一种选择是将数组传递给本地数据并迭代该数组以稍微干掉一些东西

= render partial: 'layouts/info_header', locals: { title: 'Your clients', levels: [link_to('Clients', clients_path), link_to('Something else', something_else_path)] }

在部分内容中,您可以执行以下操作:

- if levels.any?
  - levels.each do |level|
    %li= level

你可以更深层次,定义一个帮助方法来生成水平数组,这将进一步清理视图。