はじめに
Ruby onRails6 実践ガイドを学習している中、名前空間のディレクトリ構造についてふと疑問に思い動作確認をしてみました。
結論
先に結論を記載します。
疑問に思ったこと、試したことを見る必要のない方はこちらのみ確認していただければと思います。
app/任意のフォルダ名/namespaseで設定したフォルダ/対象ファイル
このようにappフォルダ直下に任意の名前のフォルダを作成し、routes.rb
の名前空間で
設定した名称のフォルダの直下のファイルを置くことで、処理を呼べるようです。
例)routes.rb
constraints host: config[:admin][:host] do
namespace :admin, path: config[:admin][:path] do
root "top#index"
get "login" => "sessions#new", as: :login
resource :session, only: [ :create, :destroy ]
resources :staff_members
end
end
app/services/admin/authenticator.rb
疑問に思ったこと
Railsガイドの2.6 コントローラの名前空間とルーティングに
このように記載されておりました。
コントローラを名前空間によってグループ化することもできます。最もよく使われる名前空間といえば、多数の管理用コントローラ群をまとめるAdmin::名前空間でしょう。これらのコントローラをapp/controllers/adminディレクトリに配置し、ルーティングでこれらをグループ化できます。
・appフォルダ直下にsampleディレクトリを作成する
であれば、controllers出なくてもapp/フォルダ名/名前空間で設定したフォルダ名の直下に
ファイルをおけばいけるのでは?
と考えました。
試したこと1
'app/samples/admin/hello.rb'を作成します。
class Admin::Hello
def hello
puts "Hello World"
end
end
適当なRailsアプリケーションにこちらのファイルを呼び出すよう実装して実行してみた結果
当初の予定通り呼び出すことができました。
試したこと2
'app/samples/samples/admin/hi.rb'を作成します。
class Admin::Hi
def hi
puts "Hi World"
end
end
適当なRailsアプリケーションにこちらのファイルを呼び出すよう実装して実行してみた結果
こちらは読み込みに失敗しました。
以上の結果から、appフォルダ直下に任意の名前のフォルダを作成し、routes.rb
の名前空間で
設定した名称のフォルダの直下のファイルを置くことで、処理を呼ぶことがわかりました。