- 公開日:2016年04月08日
記事概要
railsで指定したディレクトリにコントローラーを作成する方法です。
さらに、ルーティング(route.rb)とユニットテスト(rspec)の記述方法をまとめた記事です。
環境
- rbenv
- bundler
- rails 4.2.5
- ruby 2.3.0
- rspec-rails 3.4.2
指定ディレクトリにコントローラ
railsでアプリを開発する時、指定ディレクトリにコントローラーを作成したい場合があります。
例えば、フロント以外に必要な機能です。「admin」「api」「analysis」等が考えられます。
railsコマンド
コントローラーの作成はrailsコマンドを使います。ディレクトリを指定する場合は
rails generate controller {フォルダ名}:{クラス名}
とします。
ディレクトリ名とクラス名を「::」で区切ります。
実際にコマンドを叩きます。サンプルとして、analysisフォルダの下にtop_controller.rbを作成します。
cd {project_folder} rbenv exec bundle exec rails generate controller analysis::top
実行結果を確認します。
ls -l app/controllers/ drwxr-xr-x 1 vagrant vagrant 102 Apr 6 02:30 analysis -rw-r--r-- 1 vagrant vagrant 1615 Apr 4 23:20 application_controller.rb drwxr-xr-x 1 vagrant vagrant 102 Feb 7 00:03 concerns
controllerフォルダの下にanalysisフォルダが作成されています。
続いて、analysisフォルダ下にtop_controller.rbファイルが作成されていることも確認しましょう。
ls -l app/controllers/analysis/ -rw-r--r-- 1 vagrant vagrant 95 Apr 6 04:07 top_controller.rb
top_controller.rbが作成されているのが確認できました。
ルーティング
次は、上記で作成したanalysisフォルダに接続できるルーティングの設定です。
config/routes.rbファイルに記述します。
まずは現在のanalysisフォルダへの指定なしのルーティングを確認します。
root to: 'top#index' get 'top/index'
パスをrake routes(bundle exec rake routes)コマンドで確認します。
Prefix Verb URI Pattern Controller#Action root GET / top#index top_index GET /top/index(.:format) top#index
analysisフォルダの指定がないことが確認できました。
次はフォルダを指定してルーティングを指定します。
フォルダの指定にはnamespaceを利用します。記述方法は
namespace モジュール名 [, オプション] do ルート定義 end
です。
実際にconfig/routes.rbファイルに記述します。
root to: 'top#index' get 'top/index' namespace :analysis do get 'top/index' end
再びrake routes(bundle exec rake routes)コマンドで確認します。
Prefix Verb URI Pattern Controller#Action root GET / top#index top_index GET /top/index(.:format) top#index analysis_top_index GET /analysis/top/index(.:format) analysis/top#index
analysisフォルダ以下を参照する「analysis/top#index」が正常に設定されました。
テスト
最後に、ルーティングのユニットテストを記載します。
テストはRspecコードで記述します。
この記事は、Rspecのインストールを終了している前提で話を進めます。
もし、Rspecのインストールをしていない場合は、この記事を参照してRspecのインストールをしてください。
まずはrouteを作成するテストファイルを作成します。
cd {project_folder} cd spec/ mkdir routing cd routing/ // specファイルを作成 touch site_route_spec.rb
{project_folder}/spec/routing/site_route_spec.rbファイルを作成後、ルーティングのテストコードを記述します。
require 'rails_helper' describe "routing for site" do describe 'GET analysis_top_index' do subject { {:get => analysis_top_index_path} } it { should be_routable } it { should route_to :controller => 'analysis/top', :action => 'index' } end end
rspecのテストを実行します。
cd {project_folder} bundle exec rake spec Finished in 3.67 seconds (files took 3.66 seconds to load) 24 examples, 0 failures, 3 pending
正常に動作することが確認できました。
まとめ
railsで指定ディレクトリにコントローラを作成する場合は、テストまでまとめてしっかりと記述しましょう。
もちろんMinitestで記述しても構いません。
以上。
0 件のコメント:
コメントを投稿