因此,我正在尝试添加动态锚标记以实现可访问性。根据URL,将锚标记放置在主体下方的顶部。我最终在视图中做了这样的事情:
<body>
<div class="skip">
<%= yield :upper_body%>
<%= anchor_update %>
<a href="/"> Navigation - Home </a>
</div>
</body>
我的anchor_update方法具有以下if / else要清除的混乱:
def anchor_update
url = request.original_url
if url.include?('services')
content_tag(:a, "Skip to Services Content", :href => '#services')
elsif url.include?('about')
content_tag(:a, "Skip to About", :href => '#about-content')
elsif url.include?('core-values')
content_tag(:a, "Skip to Core Values Content", :href => '#core-values')
elsif url.include?('condition')
content_tag(:a, "Skip to Condition Content", :href => '#condition-content')
elsif url.include?('top')
content_tag(:a, "Skip to Top Content", :href => '#top-content')
else
'¯\_(ツ)_/¯'
end
end
编辑:最初我不知道如何安全地转义该语句。返回作品。但这是使用if / elsif的麻烦解决方案。因此,我试图找出是否有更清洁的解决方案。
其他编辑: 我们目前正在使用CMS,允许用户生成新页面,该页面将使用我们为他们设计的名为two_pane的模板,其中有20种左右,因此该方法会尝试访问每个页面。
答案 0 :(得分:3)
案例回答是一个好的开始。但是您可能只是使用link_to而不是content_tag来清理所有重复项。
link_to("Skip to Services Content",'#services')
link_to("Skip to About", '#about-content')
等等
答案 1 :(得分:2)
要摆脱冗长的if-elseif-else语句,可以将case
与regexp结合使用:
def anchor_update
url = request.original_url
case url
when /services/
content_tag(:a, "Skip to Services Content", href: '#services')
when /about/
content_tag(:a, "Skip to About", href: '#about-content')
when /core-values/
content_tag(:a, "Skip to Core Values Content", href: '#core-values')
when /condition/
content_tag(:a, "Skip to Condition Content", href: '#condition-content')
when /top/
content_tag(:a, "Skip to Top Content", href: '#top-content')
else
'¯\_(ツ)_/¯'
end
end