はじめに
今スクールでpictweetという、写真とツイートを一緒に投稿できる、簡単な練習用のwebサービスをつくっているのですが、ふと気になったことがあったので記事にしてみました。
form_tag,form_withとnewアクション
MVCモデル学習し、ツイートが投稿されたときの流れも理解していたつもりでした。
投稿されたデータがデータベースに保存されるためにはnewアクションでインスタンス変数を定義しなければいけないと思っていたのですが、、、
サンプルコードを見ると
def new
end
え???newアクションの中身なにもないやん!(◎_◎;)
でもよく似たwebサービスのサンプルコードではpostsコントローラに「@post = Post.new」としっかりインスタンス変数が定義されていました。
何が違うの?
と思って数時間かけて調べた結果,HTMLでform_tagを使用していた場合は、newアクションでインスタンス変数は定義しなくていいみたいです。
逆にform_withを使用する場合は@モデル名で定義しなければいけないみたいです。
もう少し調べるとform_forというのも出てきて、そもそもform_forとform_tagは投稿されたデータをデータベースに保存するかしないかで使い分けるんですね。
ただ新しく作られたform_withは両方の用途で使用し、またセキュリティ面でも有能のようです。
結果、これからは投稿フォーム系にはform_withを使うのがベストというのが今回の学びです。