Railsプロジェクトの階層表現

■ 目的

Railsでプロジェクトを作成していくと、Controllerクラスなどが肥大化する傾向にある。
そこで、プロジェクト構成を分かりやすくするために、プロジェクトに階層を持たせる。

■ 構成

試しに、「admin」ディレクトリ以下にコントローラーを作成する場合。
全て作成するとプロジェクト構成は以下になる。

example>app>controllers    >admin>main_controller.rb
>helpers>main>admin>main_helper.rb
>views >main>admin>index.html.erb
Controller

app/controllersの直下にadminディレクトリを作成。
adminディレクトリ以下に、main_controller.rbを作成する。
クラス名は、「ディレクトリ名::コントローラー名」で記述する。

class Admin::MainController < ApplicationController

end

Helper

app/viewsのディレクトリ直下にadminディレクトリとmainディレクトリを作成。
mainディレクトリ以下に、main_helper.rbを作成する。

View

app/viewsのディレクトリ直下にadminディレクトリとmainディレクトリを作成。
mainディレクトリ以下に、index.html.erbを作成する。

Model

Modelには特に制限はない。

■ URLの指定方法

views/admin/indexにアクセスする場合は、以下になります。
http://localhost:3000/admin/main/index

■ redirect_toやlink_toの指定方法

views/admin/indexにアクセスする場合は、以下になります。
⇒ redirect_to :controller => '/admin/main', :action => 'index'
⇒ link_to 'テスト', :controller => '/admin/main', :action => 'index'

※ 注意事項
controllerを指定する際に、以下のことに注意する。
・頭に'/'をつける。
・シンボルは使用しない。

例えば、深い階層(例だとadmin以下)のcontrollerから浅い階層(controllers直下)に
redirect_toする場合に、シンボルやスラッシュなしで指定していると、admin直下を
探しに行ってしまう。

■ generateの記述

generateでは以下のように指定する。

# ruby script/generate controller admin::main