我有一个通用的布局文件,用于整个站点。它包含如下链接:

<%= link_to("Home", { :controller => :home, :action => :index }) %>

以及其他常见的页眉/页脚链接等。
我所有的控制器都在app/controllers/目录下。但我为管理员添加了一个名称空间(禁止用户等):
namespace :admin do
  resources :users
end

我的管理名称空间在外观上没有任何不同,因此它使用与网站其余部分相同的布局。这导致了一些问题,因为我所有的link_tourl_for调用都被错误地解释为,比如:
<%= link_to("Home", { :controller => "admin/home", :action => :index }) %>

会导致应用程序崩溃,因为不存在这样的路由。我是否必须浏览布局使用的所有模板,并用前导斜杠更改link_to的控制器部分,或者是否有更好的方法使所有顶级路由在管理命名空间下都能正常工作?我从管理名称空间链接到顶级名称空间中有很多事情,所以如果我不必特别考虑我的link_to调用,那就太好了。
总之,当在一个有名称空间的控制器下时,是否必须在:controller中的所有link_to参数前面加上一个前导斜杠,以便跳出名称空间?

最佳答案

在路由上定义论坛路由并使用论坛路径(而不是:controller/:action散列)应该足够而且更干净。
配置/routes.rb:

match '/forums' => 'forums#index', :as => :forums

意见:
<li class="menuitem"><%= link_to("Forums", forums_path()) %></li>

10-08 08:18
查看更多