アプリケーション内で利用するけどMVCに当てはまらないモジュールをどう扱うか。
- モデルとして扱う
- libディレクトリで管理する
- 新しいレイヤーを定義する
libディレクトリ
libディレクトリには元々requireパスが設定されているので、例えばlib/tatoeba.rbというファイルがあれば、下記でインクルードできる。require 'tatoeba'また、libにはtasksというディレクトリがRailsプロジェクト作成とともに作られますが、ここはRakeタスクの置き場所です。ここに.rake拡張子のファイルを置けば、rakeコマンドで直接利用できる。
オートローディング
Railsでは、クラス名、ファイル名が下記の規約に沿っていれば自動でファイルをrequireしてくれる。
- ファイル名はスネークケースで記述し、クラス名をキャメルケースで記述する
- クラスやモジュールのネームスペースはディレクトリで表現する
例えば、Roll::SuperUserというクラスを参照して、それが定義されていなければroll/super_user.rbをrequireしようとし、autoload_pathsに含まれるディレクトリにも無ければエラーが発生する。
例えてもらっても2番目の説明がよくわからない。
autoload_pathsで設定されているデフォルトは下記のディレクトリ。
- app/controllers
- app/models
- app/helpers
- app/mailers
- app/controllers/concerns
- app/models/concerns
オートローディングさせるディレクトリの追加はconfig/application.rbで行う。詳しくはp132。
新しいレイヤーの配置とオートローディング
app以下にディレクトリを作成し、autoload_pathsを追加すれば、あとは命名規約に沿っていればそのクラスは他のコード内からすぐに使えるようになる。
app以外でもいいらしいけど、一般的にapp以下に配置するみたい。
はー、わかんね。
0 件のコメント:
コメントを投稿