【问题标题】:How to do a Switch based on controller with ruby on rails?如何使用 ruby​​ on rails 进行基于控制器的 Switch?
【发布时间】:2010-06-01 10:19:58
【问题描述】:

如何在 ruby​​ on rails 中进行切换:

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 %>

【问题讨论】:

  • 不要忘记将代码 sn-ps 缩进四个空格。代码按钮(1010 图标)将为您执行此操作。

标签: ruby controller switch-statement


【解决方案1】:

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

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

因此,您绝对应该能够通过params[:controller] 访问它,并且,如果controller_name 方法在视图的范围内,您应该改用它。

至于 switch 语法本身,你确实需要这样做

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

但是为什么呢?

【讨论】:

    【解决方案2】:

    每当您不得不做这样的事情时,这意味着应用程序设计存在问题。并不是说我过去从未这样做过,而是我现在不这样做,而且人们对此表示不满。

    而不是做你现在正在做的事情,如果你根据控制器的职责适当地命名你的控制器,毕竟它们只是类并处理来自用户等的请求,那么你可能不必做这个切换陈述。例如,在对它们进行命名空间之后,您的视图可能会有由不同部分组成的不同布局,这可能不需要您在控制器/视图中进行此切换,从而保持代码干净。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      相关资源
      最近更新 更多