-1

为什么这个小代码片段(用于具有 css 类的导航助手)给我一个undefined method 'include?' for nil:NilClass在线elseif

page_classes_string可能类似于“oddchap oddchap_zoidberg oddchap_zoidberg_index” 。我认为这种方法的目的很明确:

  1. 去掉page_classes_stringif 它包含 '_index'中的最后一个单词
  2. page_classes_string与当前进行比较,page_string并返回一个带有适当类名的字符串以进行某些导航。

我在 irb 中尝试了这段代码,当然它可以工作,但不在我的中间人配置中。我也可以通过使用分配给我的“page_classes_string”的第三个变量来重写它,但这似乎有点麻烦。有什么建议么?

当然,_string附加到以下变量名称仅用于说明目的。

def nav_active(page_string)
  if page_classes_string.match(/_index/)
    page_classes_string = page_classes_string.split(/ /)[0..-2].join(' ')
  end

  if page_classes_string == page_string
    'active'
  elsif page_classes_string.include? page_string
    'semiactive'
  else
    nil
  end
end
4

1 回答 1

1

我建议摆脱page_classes_string并简单地创建一个新课程来举办你的 css 课程。根据您当前生成 的方式page_classes_string,我认为这不会造成太大的破坏:

class PageClassCollection
  attr_reader :css_classes

  def initialize(*classes)
    @css_classes = classes
  end

  def to_s
    css_classes.join(' ')
  end

  def non_index_classes
    css_classes.select {|c| !c['_index']}
  end

  def nav_active?(page_string)
    return 'active' if non_index_classes == [page_string]
    return 'semiactive' if non_index_classes.include? page_string
    nil
  end
end

你会像这样使用它:

page_classes = PageClassCollection.new('oddchap', 'oddchap_zoidberg', 'oddchap_zoidberg_index')
page_classes.nav_active?('oddchap') #=> 'semiactive'

如果您仍然需要将其转换为字符串,.to_s请处理好(如果您使用字符串插值,它将自动调用,例如"#{page_classes}")。

于 2013-02-06T04:22:03.660 回答