代码之家  ›  专栏  ›  技术社区  ›  Rubytastic

如何使用RubyonRails进行基于控制器的切换?

  •  0
  • Rubytastic  · 技术社区  · 15 年前

    如何在RubyonRails中进行切换,比如:

    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 回复  |  直到 15 年前
        1
  •  2
  •   Martin DeMello    15 年前

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

    这个 params 哈希将始终包含 :controller :action 钥匙,但你应该 使用方法 controller_name action_name 而是访问这些值。路由定义的任何其他参数,例如 :id 也将提供。

    所以你绝对可以通过 params[:controller] ,如果 控制器名 方法在视图的作用域中,应改为使用该方法。

    至于开关语法本身,您确实需要这样做

    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
  •  1
  •   nas    15 年前

    每当您必须做这样的事情时,这意味着应用程序设计有一些不正确的地方。不是说我过去从来没有做过,而是我现在没有做过,这是令人不快的。

    如果您根据控制器的职责对它们进行适当的命名,毕竟它们只是类,并且处理来自用户的请求等,那么您可能不必执行这个switch语句。例如,在对它们进行名称间距之后,您可能会为视图使用不同的分区制作不同的布局,这可能不需要您在控制器/视图中进行此切换,从而保持代码的整洁。