Rails勉強会@東京、面白かったんですが。
敢えてはてぶに登録はしない;-p
で。
Merbネタで、瀧内氏が、Merbでプロジェクトを作るネタをやって下さっていた訳ですわ。
で、まあ、よくある感じで、ブログを作る、みたいな。
まず、Postモデル作って、コントローラ作って、ビュー作って。
んじゃあ、コメント作れるようにしましょう、ってんで、Commentモデル作って、コントローラ作って、ビュー作って。
んで、Postモデルからhas_many :commentsして。
Postのshowアクションにcommentsコントローラに送信出来るフォームを作って。
で、Postオブジェクトを新規で作って、それに関連付けされたCommentオブジェクトを作って。
で、実際に、送信。
で、そこで諸橋氏と問答に入った訳ですよ。
「commentsコントローラのcreateアクションに行って、saveがfalseだったら、render(:action => "show")に投げて...」
「いや、renderにすると、元のPosts#showの内容が描画されないから、ダメだよね」
「じゃあ、Posts#showにリダイレクト?」
「かなぁ」
ん?
いやいや、ひとつのアクションの中で、二つのredirect_toは指定出来ないっすよ?
アレ? 違ったっけ?
「ゴニャラゴニャラ...(問答続く)」
......。
「なんか、まだ、この辺を上手くやる方法に辿り着いていませんが...」
...ええーっ......
いやいや、そんな面倒なことを考えなくっても...
とは思ったんだけど、なんて云うの? ほら、オイラ、オツムが貧弱じゃない?www
バリバリと、ロバート・ウッドヘッドの様に頭の中でコードかけるほど、聡明じゃないじゃない?wwww
あと、シャイで人見知りで表に出たがらない性格じゃない?wwwww
で、う〜ん...と考えながら、帰りの電車に乗ってたんだけど、キレイにやる方法を思いついて(つうか、ムチャクチャ普通にセオリー通りだと思うんだけど)、で、丁度、今作っているhogehogeでコメント機能を作ろうとしていたから、それをやって、んで、そのコードをペロンと貼っつけようかな、と思っていたら、ウッカリ消去してしまった.svnのお陰で、リポジトリとの整合性を取るのに右往左往して、んで、今に至りましたwww
単純に、Posts#showアクションの中で、
def show @post = Post.find(params[:id] <del> @comment = Comment.new </del> @comment = @post.comments.new end
とかやって、Postsコントローラにpost_commentとかっていうアクション作って、Post#showのビューで、そのアクションに送信するフォームを作って(対象は@commentね)、んで、post_commentアクションでは、こんな具合(Railsでの書き方、ね。Merbは知らんよ;-))
def post_comment @post = Post.find(params[:id]) @comment = @post.comments.new(params[:comment]) if @comment.valid? @post.comments << @comment redirect_to(post_path(@post.id)) else render(post_path(@post.id)) end end
で、いいんじゃないの?
やってることは、@commentを、プッシュする前に検証して、trueならプッシュしてshowアクションにリダイレクト、falseなら、renderで、showのビューに戻して。
さすれば、Posts#showも、@commentを拾ってくれよう。
まあ、ウチで作っているhogehogeでは、Commentモデルは、ポリモーフィックで色んな所と関連付けされてるから、ソレと同じように、Comment.newするんじゃなくって、Post.comments.newにしているんだけど。
で、これなら、ちゃんと検証も通るし、検証でのエラーもビューで拾えるし。
ナニゲに、commentsコントローラを作る必要はない訳ですよ。
ダメですかね?
......アレ?
なんかオイラ、バリバリのエンジニアさんに勝っちゃったキブンになってるぞ?www
つうか、これ、列席者をセッション・トークに参加させる為の釣りなんじゃねぇの?wwwwww
......仕事下さい.........
www