1

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

我正在使用简单导航 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
4

1 回答 1

0

大致(我永远不记得它是getfetch访问哈希值):

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.

于 2013-11-04T14:59:08.130 回答