2016年4月8日金曜日

【Rails4.2.5】 railsコマンドで指定ディレクトリにコントローラを作成する

  • 公開日: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を作成します。

terminal

cd {project_folder}

rbenv exec bundle exec rails generate controller analysis::top

実行結果を確認します。

terminal

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ファイルが作成されていることも確認しましょう。

terminal

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フォルダへの指定なしのルーティングを確認します。

{project_folder}/config/routes.rb

    root to: 'top#index'
    get 'top/index'

パスをrake routes(bundle exec rake routes)コマンドで確認します。

terminal

               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ファイルに記述します。

{project_folder}/config/routes.rb

    root to: 'top#index'
    get 'top/index'

    namespace :analysis do
      get 'top/index'
    end

再びrake routes(bundle exec rake routes)コマンドで確認します。

terminal

               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を作成するテストファイルを作成します。

terminal

cd {project_folder}

cd spec/

mkdir routing

cd routing/

// specファイルを作成
touch site_route_spec.rb

{project_folder}/spec/routing/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のテストを実行します。

{project_folder}

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で記述しても構いません。

以上。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


参考記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...