rails4にて、rails_apiとwebベースのhtmlアプリを同時に使う
JSON APIとHTMLベースのwebアプリ両方を含んだrails4アプリを作ろうとしています。
/api
以下に来たリクエストに関してはパフォーマンスの最適化ためrails_apiで使用される最低限のミドルウェアを介してレスポンスを返し、それ以外のリクエストに関してはデフォルトのRailsのミドルウェアセットを介して処理をさせていと考えています。
現状、
- rails_api gemを追加
- routes.rbにてapiをnamespaceで分ける
- apiのコントローラに関してはActionController::API
を継承させる
- HTMLベースのコントローラに関してはActionController::Base
を継承させる
という方針で進めています。以下、主な部分のコードです。
app/controllers/base_api_controller.rb
class BaseApiController < ActionController::API
...
end
app/controllers/api/projects_controller.rb
module Api
class ProjectsController < BaseApiController
def index
..
end
end
end
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
..
end
app/controllers/projects_controller.rb
class ProjectsController < ApplicationController
def index
..
end
end
config/routes.rb
namespace :api do
resource :projects
end
resource :projects
config/application.rb
config.autoload_paths += %W(
#{config.root}/app/controllers/api
)
この状態で/api/projects
にリクエストをなげるとうまく/app/controllers/projects_controller.rb
が処理してくれるのですが, /projects
にアクセスすると/app/controllers/projects_controller.rb
に処理して欲しいところ、以下のエラーが表示されます。
Unable to autoload constant ProjectsController,
expected /app/controllers/api/projects_controller.rb to define it.
どのようにすれば正しく動くように修正できますでしょうか。
もしくは、そもそもこの実装方針自体おかしいようでしたら代案を教えていただけますと幸いです。