如何在轨道上使用带有ruby的控制器进行交换机?

时间:2010-06-01 10:19:59

标签: ruby controller switch-statement

如何在轨道上切换红宝石,例如:

case controller "home" 
  do home
case controller "about"
  do about
else 
  do home

我目前有这段代码:

<% case current_page(:controller) %>
      <% when "forums" %>
          <%= render :partial => 'shared/sidebar/sidebar_forums' %>
      <% when "events" %>
          <%= render :partial => 'shared/sidebar/sidebar_events' %>
      <% else %>
          <%= render :partial => 'shared/sidebar/sidebar_frontpage' %>
      <% end %>

2 个答案:

答案 0 :(得分:2)

引自http://rails.nuvvo.com/lesson/6371-action-controller-parameters

  

params哈希将始终包含:controller:action个键,但您应该   请使用方法controller_nameaction_name来访问这些值。路由定义的任何其他参数,例如:id也将可用。

所以你绝对应该可以通过params[:controller]访问它,如果controller_name方法在视图范围内,你应该使用它。

至于切换语法本身,你需要像

那样做
case controller_name
when "home"
  do_home
when "about"
  do_about
else
  do_default
end

你可以做一些黑客攻击并获得

case true
when controller "home"
  do_home
when controller "about"
  do_about
else
  do_default
end

但为什么?

答案 1 :(得分:1)

每当你不得不做这样的事情时,这意味着应用程序设计有些不对劲。并不是说我过去从未这样做过,但我现在不这样做,而且不满意。

如果你根据他们的职责适当命名控制器,而不是做你现在正在做的事情,毕竟他们只是类并处理来自用户的请求等,那么你可能不必这样做声明。例如,在命名空间之后,您可能会为视图使用不同的部分布局,这可能不需要您在控制器/视图中进行此切换,从而保持代码清洁。