如果存在嵌套数组,如何返回true

时间:2013-11-04 14:42:20

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

我正在学习Rails并且有点卡住了。

我正在使用simple-navigation gem并构建自定义渲染器,如果存在配置选项,我想向HTML元素添加引导图标。我收到错误“错误的参数数量(0表示1)”,我认为这与我的方法有关。我试图将方法定义为:

content_tag('span', (content_tag(:i, nil, :class => item.html_options[:opts][:icon]) + item.name if have_icon?), link_options_for(item).except(:method))

def have_icon?(item)
    !item.html_options[:opts][:icon].blank?
end

我不确定我是否正确编写了content_tag。事实上,我确信我没有。我也认为我得到了“错误的参数数量”,因为缺少item.html_options[:opts]item.html_options[:opts][:icon],因此指出我的方法写得不好。

有人可以帮忙吗?


编辑:

我重写了代码并且它有效,但我的问题仍然存在,所以我可能会更好地编码。所以我的问题是,have_icon?方法是正确的还是如果[:opts][:opts][:icon]都存在,我将如何重写它以返回布尔值?

这是有效的代码:

content_tag('span', name_with_icon(item), link_options_for(item).except(:method))

def name_with_icon(item)
  if item.html_options[:opts]
    if item.html_options[:opts][:icon]
      content_tag(:i, nil, :class => item.html_options[:opts][:icon]) + item.name
    else
      item.name
    end
  else
    item.name
  end
end

1 个答案:

答案 0 :(得分:0)

粗略地(我永远不会记得访问哈希值是get还是fetch):

def name_with_icon(item)
  icon = item.html_options[:opts].andand.fetch[:icon]
  content = icon ? content_tag(:i, nil, class: icon) : ""
  "#{content}#{item.name}"
end

这假定为andand gem,或者您可以使用try