Rails 3命名空间路由:如何从命名空间链接返回到全局命名空间?[已修订]

3

我是一个有用的助手,可以为您进行翻译。

以下是需要翻译的内容:

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

<%= 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调用,那就太好了。
总之,在命名空间控制器下,您是否必须在所有link_to中加上前导斜杠来打破命名空间?

尝试使用'<真实资源名称>/forums',甚至是<真实资源名称>_forums_path(或任何命名路由)。我不会将其放在答案中,因为这只是一个猜测/建议。 - user483040
但问题不在于链接到命名空间路由,而是从命名空间路由内部链接到非命名空间路由,如果你明白我的意思的话? :) 这就像你必须在布局中链接的所有控制器名称前加上斜杠,例如 <%= link_to("Home", { :controller => "/home", :action => :index} %>, 否则它将尝试在管理命名空间中查找“Home”控制器,但甚至不考虑在全局命名空间中查找。 - d11wtq
你可以考虑查看这个链接:http://pandejo.blogspot.com/2009/03/rails-nested-resources-tutorial.html - user483040
我的理解是,如果你想使用一个与当前控制器概念不同的控制器名称,你必须要明确指出。这就是我在第一条评论中真正想表达的。话虽如此,嵌套资源可能会让你达到你想要的目的。另一种方法是根据用户权限或角色使您的用户/xxx/edit 表现出不同的行为。 - user483040
谢谢,我想命名所有的路由会有所帮助。从维护/重构的角度来看,我应该这样做。 - d11wtq
1个回答

3

在路由中定义论坛路线并使用forums_path代替: controller /:action哈希应该足够简洁明了。

config/routes.rb:

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

视图:

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

谢谢,实际上你发帖时我正在完全重写我的问题,因为我觉得它可能解释得太糟糕了 ;) 我认为命名路由应该能解决很多问题,你是对的。我在处理路由方面遇到了一些问题,但我想这只是因为我还不习惯Rails的做法o_O - d11wtq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接