![]() | tech note |
| 自分をリファクタリング中。 |
AkelosのActiveRecordは、標準では動的ファインダが使えませんが、プラグインが提供されている。
動的ファインダとは、user = User.find_by_email(params[:email])
といったメソッド名だけでemailカラムにwhereしてくれるアレです。
Rails触ったときに「すげー」と思ったので、ぜひAkelosでも使いたいなと思っておりました。
Akelosでは、標準では動的ファインダが使えませんが、Akelosのプラグインのページに「dynamic_finder」なるものがあります。
これを、> php script/plugin install dynamic_finder
でインストール。
あとは、ActiveRecordのfindメソッドに"_by_hoge"をつけてあげる。$this->post =& $this->Post->find_by_id($this->params['id']);
検索結果が複数件なら、findAllメソッドに対してつけてあげます。$this->comments =& $this->Comment->findAll_by_article_id($this->params['id'], array("order" => "id"));
しかけとしては、app/shared_model.phpに__callメソッド(PHPでmethod missingなときに呼ばれるメソッド)にメソッド名を解析してうまいことやる処理が追加されているようです。
見てみると、findOrCreateBy~なんかもあるので、検索結果がない場合にレコード登録する動的ファインダも使えそうです。
あと、dynamic_finderプラグインはPHP5じゃないと使えません。
レンタルサーバーで使うならPHPのバージョンに注意。