Railsで複数モデルを扱う巨大フォームで幸せになれる「ActivePresenter」プラグイン

Railsで複数モデルを扱う巨大フォームを作るときって皆さんどうしてますか?会員の属性、プロフィール管理周りで良く発生しますね。標準だとモデル単位のエラーだったり、関連モデルはエラーの有無しか拾えなかったり。


id:ursmさんのBLOGで良さげなプラグインが紹介されていたのですが「複数のモデルに跨がった巨大なフォームには散々泣かされましたが、ActivePresenter を使えば楽になれそうな気がします。使ってみます。」で終わっていたのでrails-tokyoのIRCで後日談を聞いてみました。そしたら「今ガンガン使ってて結構幸せです」とのことですので私も使ってみようと思います。使う場面としてはアクション一つでモデル複数を扱うような場合、ですね。

http://d.hatena.ne.jp/ursm/20081006/1223309255

複数の ActiveRecord オブジェクトをまとめて扱う

一つのアクションで複数のモデルオブジェクトを操作するのは意外に厄介なものです。データの受け渡しは fields_for で何とかなるとしても、関連の組み立てやエラー処理などやっているとすぐにコードがとっちらかってしまいます。

ActivePresenter プラグインを使うと、複数のモデルオブジェクトを束ねて一つのオブジェクトのように操作することができます。

IRCログ

14:52 (ysakaki) こんにちは!
14:56 (littlestarling) ちわっす
14:56 (ysakaki) ActivePresenterって使っている方います?
14:59 (ysakaki) 開発状況ってどうなんでしょうね。開発継続してるのかしら
15:01 (littlestarling) http://github.com/giraffesoft/active_presenter/network
15:01 (littlestarling) 一応進んでるようにも見えますね
15:02 (ysakaki) おお格好いい!こんな画面があったとは
15:03 (ysakaki) http://github.com/ursm/active_presenter/network/members
15:03 (ysakaki) ursmさんて開発メンバー?
15:04 (ursm) いえ、forkしてるだけですよ
15:05 (ysakaki) あら
15:06 (ursm) ここ最近動きはないですね < ActivePresenter
15:06 (ursm) validation を使えるよう拡張した fork があったので、私はそれを使っています
15:10 (ysakaki) Validation使える方がもちろんいいですよね
15:10 (ysakaki) というか巨大フォーム&複数モデルの面倒なとこはそこにあるような
15:14 (ysakaki) >ursmさん:お薦め度はどれくらいですか?<ActivePresenter
15:15 (ursm) 難しいですね
15:15 (ysakaki) 「複数のモデルに跨がった巨大なフォームには散々泣かされましたが・・・」の後日談が知りたかったんですが
15:15 (ysakaki) ActivePresenterを使ったら幸せになれました!みたいな
15:16 (ursm) ActivePresenter 自体は特に凄いことをしてくれるわけではないんですが、モデルに寄せきれないアプリケーションロジックを吸収する層を設けることはとても良い方向性だと思います
15:16 (ursm) 今ガンガン使ってて結構幸せです
15:17 (ursm) 最近だと CSV インポート機能なんかを Presenter で実装してますね
15:17 (ysakaki) おおー。
15:18 (ysakaki) 難しいとはどの辺りでしょう?
15:19 (ursm) お薦め度って一概には言えなくて難しいなー、と
15:20 (ysakaki) なるほど。
15:20 (ursm) モデルだけで無理なく完結するのなら必要ないんでしょうねえ
15:22 (ysakaki) 確かに。