14

バージョン管理された API パスを持つ必要があるモバイル API のルートを設定しようとしています。/controllers/api/v1/mobile/にある別のコントローラーAuthControllerに実装されているモバイル認証を機能させることができました。

使用例:

myapp.com/api/v1/mobile/auth

しかし今、既存のリソース コントローラーを追加の API ルートとしてこのパス パターンに登録したいと考えています。具体的: これは/controllers/tracker/tasks_controller.rbにあるTasksControllerになります。そこで、routes-definition にモバイル ルートを追加しました。

# routes.rb
namespace :tracker, path: 'timetracking' do
  resources :tasks, 'jobs'
end

namespace :api do
  namespace :v1 do
    namespace :mobile do
      resources :auth, :only => [:create, :destroy]

      namespace :tracker do    #added mobile route
        resource :tasks, controller: 'tracker/tasks', as: :mobile_tasks
      end
    end
  end
end

しかし、myapp.com/api/v1/mobile/tracker/tasksを呼び出すと、エラー メッセージが表示されます。

Routing Error
uninitialized constant Api::V1::Mobile::Tracker

上記の元のタスクルートとの競合を避けるために、特にエイリアス:mobile_tasksをこのルートに追加しました。このルートにコントローラーを適切に設定する方法はありますか?

アップデート#1

このルートを名前空間ではなくスコープとして定義しても、うまくいきませんでした。

scope "/api/v1/mobile/tracker" do
    resources :tasks, controller: 'tracker/tasks', as: :mobile_tasks
end

しかし今回は、ルートパス自体も解決しませんでした。

Routing Error
No route matches [GET] "/api/v1/mobile/tracker/tasks"

私の追加の mobile-api ルートが完全に異なる名前空間trackerを指そうとすることが問題であると思います。

4

3 に答える 3

23

http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routingによると、名前空間の代わりにスコープを使用する必要があります。

(なしで)にルーティング/admin/postsしたい場合は、次を使用できます。PostsControllerAdmin:: module prefix

scope "/admin" do
  resources :posts, :comments
end
于 2012-04-23T19:30:07.887 に答える