Rails更改了较长的if / else语句

时间:2018-10-24 17:49:26

标签: ruby-on-rails

因此,我正在尝试添加动态锚标记以实现可访问性。根据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种左右,因此该方法会尝试访问每个页面。

2 个答案:

答案 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