Categories
open all | close allTags
CSRF | タグ | パソコン | アクセス制御 | 国際化 | Aptana | rake | RESTful | Subversion | 名称 | デュアル・コア | スキンエンジン | Flash | Migration | モデル | テスト | ドキュメント | JustPosted | 認証 | フォームSearch
やっとコメント機能を実装
普通に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を使って解決。
ちょっと時間かかりすぎですね。
Comments
No comments yet. You can be the first!