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