我正在学习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
答案 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
。