なんか、言葉遊びの体になってきたんでツマンネぇ。

Answer to resource, the CRUD and everything

まずはネストという言葉に関する定義の問題ですが、 諸橋さんが書いているように 、PostsコントローラはComments コントローラを集約(aggregates)しますが、 内包(compose)する訳ではありません。


....僕は(多分、諸橋さんも)、コントローラがコントローラを云々とは、云ってませんよ。
Commentリソース(== Commentモデル)を、どこでハンドリングするか、ですね。
その上で、僕は、「PostのCommentなんだったら、Postの一部として扱えばいい」といっていて、諸橋さんは「Commentは結局の所CommentでしかないんだからCommentとして扱えばいい」とおっしゃっているんだと解釈していますが。


で。
ちょっと喧嘩腰に口汚い云い方をさせて頂きますが。


集約だろうと内包だろうと所属だろうと関連だろうと親子だろうが姉妹だろうが、なんだっていいよ、もう。
重要なのは、user.blog.posts.comments......っという形で、スコープを狭めて行くことが出来るという事実と、それを実現して実装しているという意味。


ポリモーフィックな状態でCommentが扱われている場合を考えれば、解りやすいと思うんだけど(まさかとは思うけど、ポリモーフィックで在る場合とそうで無い場合とでhas_many/belongs_toが持つ関連性の性質が違う、なんて云うことは云い出さないよね?)。


PostとImageがポリモーフィックにCommentと関連性を持っていたとして。
Postモデルを扱うコントローラが在って、Postがhas_manyでCommentと繋がっているのなら、Post.commentsで端からスコープを狭めておけばいい。
その上で、全てのCommentオブジェクトを一括して扱うコントローラが必要なら、その為のコントローラ、まあ、CommentsControllerでもAdmin::CommentsControllerでもいいけど、を用意すればいい。
そうすれば、Commentモデルとしても、親モデルの一部としても、扱うことが出来るし。
親モデルを主体に見るのなら、親の違うCommentオブジェクトを見る必要は無いし、見ちゃいけないし、見えないようにしないといけないだろう、と。


で。

PostsコントローラにCommentsを制御するコードを書いてしまう(内包してしまう)と、 Adminコントローラで同じ事をする必要が出来た場合に、 同じようなコードを書く必要が出てきます。


...Commentオブジェクトをどのコントローラで扱おうと、コントローラ自身のやること自体は、値を用意して、Commentモデルに、作れ・呼び出せ・書き換えろ・消せ、と伝える"だけ"でしょう?(まあ、戻り値に対しての処理があるけどw)
それが、

同じようなコードを書く必要が出てきます。

とおっしゃるのなら、if~elsif(case~whenでも同じ)で判定/分岐を繰り返すのは、同じようなコードの羅列では無い、とでもおっしゃるんですか?
それが、メンテナンス性の良いコードだとおっしゃるんですか?


その上で、

Don't Repeat Yourself!

などとおっしゃるのなら。
僕のやり方がDRYじゃない、とおっしゃるのなら


だったら、オレはオマエらにこう云ってやるよ。

Don't Reinvent the Wheel!
Don't Reinvent the Square Wheel!!