假设我的应用有两个模型,Foo 和 Bar。
Foo 可选belongs_to Bar。
现在我可以查看一个 Foo,或者搜索一个特定的 Foo,而 FoosController 会处理所有这些。我的网址是:
foos/1
和foos/new
有时我想看看一个酒吧。BarsController 处理它,我像这样处理它:
bars/1
或bars/1/edit
.
如果我正在查看 Bar,我可能想浏览属于该 Bar 的所有 Foos。所以,我想bars/1/foos/
用来看看那些Foos。
这对于嵌套资源来说非常简单,看起来像这样:
resources :foo
resources :bar do
resources :foo
end
但是,作为 Bar 一部分的 Foo 有点特殊,与常规 Foo 不同。因此,例如,如果我加载foos/1
or bars/1/foos/1
,我将查看相同的 Foo,但我在每种情况下都关注不同的信息。
所以我一直在考虑让 BarFoos 控制器在 Bar 的上下文中处理 Foos。但是,如果我将 BarFoos 嵌套在 Bar 下,那么我的助手将类似于bar_bar_foos_path
and new_bar_bar_foo_path
。这似乎是多余的。
所以,现在我正在考虑命名空间,这是我以前从未研究过的。我在 Rails 指南中看到我可以定义:
namespace "bar" do
resources :foos
end
如果我这样做了,我可以FoosController
在.app/bar/
bar_foo_path(:id)
bar_bar_foo_path(:id)
但如果我这样做,我的会发生什么BarsController
?请求如何路由到BarsController
if 而不是resources :bars
I have namespace "bar"
?
最后,在我的辅助 FoosController 中我需要做些什么特别的事情来确保与顶级 FoosController 没有名称冲突?我意识到路由说“命名空间”,但是其余的 ruby 代码如何知道app/bar/foos_controller
andapp/foos_controller
不是同一个类?
谢谢!