ruby-on-rails – 需要建议:子菜单的Rails视图结构?
发布时间:2020-12-17 03:08:08 所属栏目:百科 来源:网络整理
导读:想象一下,在您的应用程序中有两个RESTful控制器(UsersController,OffersController)和一个PagesController(用于静态内容,如index,about等). 您定义了以下路由: map.with_options :controller = 'pages' do |pages| pages.root :action = 'index' # static h
想象一下,在您的应用程序中有两个RESTful控制器(UsersController,OffersController)和一个PagesController(用于静态内容,如index,about等).
您定义了以下路由: map.with_options :controller => 'pages' do |pages| pages.root :action => 'index' # static home page pages.about :action => 'about' # static about page # maybe more static pages... end map.resources :users # RESTful UsersController map.resources :posts # RESTful PostsController 您的应用程序布局如下所示: <html> <head> <title>Demo Application</title> </head> <body> <ul id="menu"> <li> <%= link_to 'Home',root_path %> </li> <li> <%= link_to 'Offers',offers_path %> <ul id="submenu> <li><%= link_to 'Search','path/to/search' %></li> <li>maybe more links...</li> </ul> </li> <li> <%= link_to 'About',about_path %> </li> <li> <%= link_to 'Admin',users_path %> <ul id="submenu"> <li><%= link_to 'New User',new_user_path %></li> <li><%= link_to 'New Offer',new_offer_path %></li> <li>maybe more links</li> </ul> </li> </li> <%= yield %> </body> </html> 布局的问题是我希望任何时候只能看到一个#submenu.可以完全跳过所有其他子菜单(根本不需要渲染). 以Admin菜单为例:除offer_path外,该菜单应对应用程序中的所有RESTful路径都是活动的.活动表示子菜单可见. 我能想到实现这一目标的唯一解决方案是,如果条件太糟糕(编写和维护起来非常复杂),那么构建很复杂.我在寻找一个优雅的解决方案? 我希望有人理解我的问题 – 如果有什么不清楚只是评论这个问题,我将更详细地解释它. 解决方法
你可以玩的一件事是yield和content_for,与菜单的一些部分一起使用.例如,您可以将菜单的每个部分放在一个部分,然后将您的布局修改为:
<%= yield(:menu) %> 然后,您可以在视图中指定content_for,并将您想要的任何部分放入菜单中.如果没有指定它将不会被渲染. <% content_for(:menu) do %> <%= render :partial => 'layouts/menu' %> <%= render :partial => 'layouts/search_menu' %> etc... <% end %> 如果您在大多数页面中使用了大量相同的菜单,请在未找到yield(:menu)的情况下在布局中指定默认值. <%= yield(:menu) || render :partial => 'layouts/menu_default' %> 为您节省大量的打字费用. :)我发现这是处理事情的一种很好的清洁方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |