假设我的应用程序有两个模型:Foo 和 Bar。
Foo 可选地属于 Bar。
现在我可以查看单个 Foo,或者搜索特定的 Foo,FoosController 会处理所有这些。我的网址是这样的:foos/1
and foos/new
有时我想去酒吧看看。 BarsController 处理这个问题,我的处理方式如下:bars/1
or bars/1/edit
.
如果我正在查看一家酒吧,我可能想浏览该酒吧中的所有食品。所以,我想用bars/1/foos/
看看那些福斯。
对于嵌套资源来说,这非常简单,如下所示:
resources :foo
resources :bar do
resources :foo
end
然而,酒吧中的食物有点特殊,与普通食物不同。所以,举例来说,如果我加载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
under app/bar/
,并且食品控制器可以与像这样的好帮手一起处理酒吧内的食品bar_foo_path(:id)
代替bar_bar_foo_path(:id)
.
但如果我这样做,我的BarsController
?请求如何路由到BarsController
如果代替resources :bars
I have namespace "bar"
?
最后,我需要在辅助 FoosController 中做一些特殊的事情,以确保与顶级 FoosController 不存在名称冲突吗?我意识到路由说的是“命名空间”,但是 ruby 代码的其余部分如何知道app/bar/foos_controller
and app/foos_controller
不是同一个班级吗?
Thanks!