私のアプリに Foo と Bar の 2 つのモデルがあるとします。
Foo オプションで、Bars_to Bar に属します。
今、私は 1 つの Foo を見ることも、特定の Foo を検索することもでき、FoosController がそれらすべてを処理します。私の URL は次のようなものです:
foos/1
とfoos/new
ときどきバーを見たくなります。BarsController がそれを処理し、次のように取得します:
bars/1
またはbars/1/edit
.
Bar を見ている場合、その Bar の一部であるすべての Foo をブラウズしたいと思うかもしれません。bars/1/foos/
それで、それらのFoosを見るために使用したいと思います。
これは、ネストされたリソースでは非常に簡単で、次のようになります。
resources :foo
resources :bar do
resources :foo
end
ただし、Bar の一部である Foo は、通常の Foo とは一線を画す特別なものです。したがって、たとえば、foos/1
またはをロードbars/1/foos/1
すると、同じ Foo が表示されますが、それぞれのケースで異なる情報に注目しています。
そのため、バーのコンテキストにあるときに Foos を処理する BarFoos Controller を持つことを考えていました。ただし、BarFoos を Bar の下にネストすると、ヘルパーは and のようにbar_bar_foos_path
なりnew_bar_bar_foo_path
ます。それは冗長に思えます。
それで、今は名前空間について考えていますが、これはこれまで調べたことのないものです。私が定義できるレールガイドに表示されます:
namespace "bar" do
resources :foos
end
そうすれば、 のFoosController
下app/bar/
で 2 秒を作ることができ、その FoosController は のbar_foo_path(:id)
代わりに のような素敵なヘルパーを使用して、Bar 内で Foos を処理できbar_bar_foo_path(:id)
ます。
しかし、それを行うと、私のBarsController
? I haveBarsController
の代わりに if にリクエストをルーティングするにはどうすればよいですか?resources :bars
namespace "bar"
最後に、最上位の FoosController と名前が競合しないようにするために、セカンダリ FoosController 内で何か特別なことをする必要がありますか? ルーティングに「名前空間」と表示されていることは理解していますが、ルビー コードの残りの部分は、app/bar/foos_controller
とapp/foos_controller
が同じクラスではないことをどのように認識しているのでしょうか。
ありがとう!