- mymodels.gem を
- アプリケーションから使う
- アプリケーション側で拡張は必須(特にdefault_scopeとか)
- アプリケーション側でモデルの拡張は app/models/* でやりたい
存在しないconstを叩くとautoloadする [app/models/, GEMPATH/mymodels/app/models/, ... ] と行った感じのロードパスから探す 定数名とpathは一致する必要がある
mountableなengine app/models を持つ
モデルの配置方法の候補は2つ
- app/models/mymodels/*
- app/models/*
フラットに配置する
この場合relationが非常にわかりやすい Hoge.first.hages は app/models/hage をロードする
ただし 拡張はしにくい アプリケーション側で app/models/hoge を作ってしまうとそっちをautoloadしてしまう 何かの方法でgem側のファイルをロードしておくと今度はアプリ側のapp/models/* がautoloadできない
autoloadで混乱することはないがrelationが作りにくい
book <- book_authors -> author のようなrelationがgemで作られていて アプリケーション側で book と author だけを継承して拡張した場合
book.book_authors
#=> [<Mymodels::BookAuthor ...>, <MyModels::BookAuthor ...>, ... ]
ここまではよいが
book.book_authors.first.authors
#=> [<Mymodels::Author ...>, <Mymodels::Author ...>, ...]
となってしまい 期待していた Author ではない
必ずすべてのモデルを継承するというのはやりたくないし Mymodels::* を直接いじるのは・・・