active_decoratorでモデルに生やした便利メソッドをビュー以外(つまりモデルやコントローラ)の場所でも活用したい、という状況なんだけれど、そもそもなにか間違っているのだろうか…?
2013-01-31 18:44:52@t_wada 反応ありがとうございます!モデルの内容をJSONに展開してJavaScript側に渡したいときがあって、その中でURLを生成したい場合があります。たとえば、そのモデルをshowするURLですね。モデルのmethod内でURLを扱うにはどうしたらよいのでしょうか。
2013-01-31 18:52:34@t_wada コントローラだとrender_to_stringやview_contextが使えたり、デコレータだとlink_toといったhelperが使えますよね。こういう処理をモデル側に寄せたいときは、どうすればいいのかなぁ… というのが悩みでした!
2013-01-31 18:55:03@june29 なるほど理解しました。私は URL の知識をモデルに持たせることを好まないので、モデルには寄せない、という判断をすると思います。decorator や presenter をコントローラは知っていて良いでしょう。モデルはそうはしないと思います。
2013-01-31 18:58:16@june29 ビュー知識だけでなくリソース知識も含めて、 decorator/presenter に置いて良いんじゃないですかね。モデルの表現 (representation) を他のモデルが必要にする局面とは、たとえばどんなものでしょうか?
2013-01-31 19:01:37@june29 そもそも model をそのまま as_json してしまうのがよくないと思っていて、モデルを API のレスポンスにマッピングする層をもつべきだと思ってます。これとか使ったことないけどよさげ https://t.co/fR0iwsk3
2013-01-31 19:03:54june29さんとt_wadaさんのやり取りを見て、詳細表示のためのURLをJSONで渡す時は、presenterクラスに処理済みモデルとコントローラーを渡して、そこでURLとJSON生成をしていたやり方は、そんなに悪くなかったのかな、と思った。
2013-01-31 19:07:57@t_wada 「モデルの表現を他のモデルが必要にする」という状況、ちょっと考えてみたのですが、わかりませんでした!最初のツイートに書いた問題設定がよくない気がしています。少し整理します。モデルにURLの知識を持たせないというのは、ぼくもそう考えます。
2013-01-31 19:09:10@t_wada ぼくの目の前にあったのは次のようなものです。たとえばEntryというモデルがあって、createが成功したときに「そのレコードの内容をJSONで返したい。内容として、リソースのURL表現も含めたい」といった状況でした。
2013-01-31 19:12:05jsonバリバリ使う時は、AR単体だと全然足りない事が多いので、presenterクラス作って、再利用可能な形でハッシュに加工してる。コンストラクタでcontrollerを渡せるようにしていて、そこでURL系のヘルパーを使う。で、それをrespond_withとかに渡す。
2013-01-31 19:13:48@june29 良くある状況ですね。モデルの表現にURLを含めたいけど、モデルにリソースの知識を持たせたくない。その状況をオブジェクト指向的に解決するために、decorator等が生まれたのではと思います。HTMLもJSONもリソースの表現で、それを描画するのがViewです。
2013-01-31 19:15:56@june29 @t_wada モデルのJSON表現はviewなんですよ。entries/1(.html) でユーザーが見るものがviewでrenderされた文字列であるのと同様に、entries/1.json の文字列を組み立てるのはviewの仕事です。とDHHが言ってました。
2013-01-31 19:17:26@june29 @t_wada なので、そのなんちゃらデコレーターとやらがイケてないだけなんじゃないっすかね?とか言ってみたりして。
2013-01-31 19:18:03@june29 @t_wada で、デコレーターうんぬんはとりあえず置いといて、そういうケースだとこいつを使ってみるといいと思うよ!って、某誌の某特集記事に書いてありました予定です(謎)。 https://t.co/aSVp5BeX
2013-01-31 19:20:22rabl, jbuilder辺りでもっとビュー側に寄せるって書き方の方がいいのかもしれないなあ。
2013-01-31 19:22:01@june29 何故Jbuilderを薦めたというと、scaffoldしたらデフォルトでこれが出てくるんですね。なので、今回のユースケースにはツールの思想的に一番しっくり来てそうな予感がします。 https://t.co/sCBDlxJA
2013-01-31 19:29:09