やっとコメント機能を実装

普通にRailsの機能を使ってフォームからAcrive Recordのオブジェクトを作って保存しているだけ(まだエラーチェックもスクリプトインサーション対策も何もしていません)なのですが,CSRF対策機能以外にも2点ほど引っかかってけっこう時間を食ってしまいました。まあ更新系は初めてなので多少ひっかかるのはしょうがないかもしれません。

引っかかったところの一つ目は


  def create
    @comment = Comment.new(params[:comment])

    respond_to do |format|
      if @comment.save
        format.html { redirect_to(params[:destination]) }
      else
        format.html { render :action => "new" }
      end
    end
  end

の最初でフォームのパラメータからCommentオブジェクトを作るところ。フォームからデータは来ているのに設定されないインスタンス変数がいくつかありました。実はこのあたりの機能は諸刃の剣のところがあって,簡単に処理できる反面,フォームを偽装されると意図していないフィールドまで書き換えられてしまうセキュリティホールを作ってしまう可能性があります。Railsにはそれを防止する機能もあるのですがどうやらそれが働いてしまっているような感じがしました。Commentクラスでは,どうしてそうしたかは覚えていないのですが,attr_accessorを使っていくつかのフィールドを読み書き可能設定しています(Active Recordではこれをやらなくても読み書きできます)。試しにこれをはずしてみたら動くようになりました。

二つ目にはまったのはもっと単純。保存時にエラーが出るようなので,データの問題かと思っていろいろ調べてみたのですが,結局はエラーをちゃんと見ていなかっただけ。保存時の問題ではなく保存後にリダイレクトするURLを生成する部分の問題でした。ここはフォームから渡されるdestinationを使って解決。

ちょっと時間かかりすぎですね。


« Prev item - Next Item »
---------------------------------------------

Comments


No comments yet. You can be the first!


Leave comment

© 2007 yoursite.com | Designed by DesignsByDarren
Ported to Nucleus CMS: Suvoroff