1

次のようなサブディレクトリに分割されたコントローラーがいくつかあります。

app/dept1/user_controller/action

コントローラーでこの構成を使用すると、次のようになります。

class Dept1::UserController < ApplicationController
end

Rails 2 では、これだけで十分で、アプリケーションは問題なく自動ルーティングできました。

しかし、Rails 3 では、いくつかのルーティング構成を行う必要があるようです。名前空間を使用してみました:

  namespace :dept1 do
    resources :user
  end

このページは問題なく表示されます:

app/dept1/user_controller/index

しかし、app/dept1/user_controller/report は次のエラーを返します。

 "ActionController::RoutingError (No route matches [POST] "/dept1/user/report")"

他に何を設定する必要がありますか?

アップデート:

これをルートに入れると、機能します:

namespace :dept1 do
  resources :user do
    collection do
      get :report
      post :report
    end
  end
end

各アクションをハードコーディングせずにこれを行う方法はありますか?

その他の更新:

ルートが正しく機能するように修正するために私がしたことは次のとおりです。次の順序である必要があります。

match ':controller(/:action(/:id))', :controller => /dept1\/[^\/]+/
match ':controller(/:action(/:id(.:format)))'
4

1 に答える 1

-1

これは、RESTful な URL の設計を強制するための機能です。しかし、本当に Rails 2 の方法が必要な場合は、config/routes.rb の最後のブロックを参照してください。

# This is a legacy wild controller route that's not recommended for RESTful applications.
# Note: This route will make all actions in every controller accessible via GET requests.
# match ':controller(/:action(/:id(.:format)))'

コメントは、GET をアクセス可能にすると言います。実際、すべての HTTP 動詞をアクセス可能にします。

ネストされたリソースの場合、上記のルールを の下にネストする必要があると思いますnamespace :dept1

それでも、Rails 3 の方法を使用して、重要なインターフェイスのみを公開することをお勧めします。

于 2012-04-13T18:49:50.970 に答える