Modelによるデータベースアクセスの基本 (2/4)
作成:2012-02-13 07:46
更新:2012-02-16 15:36
更新:2012-02-16 15:36
■データの作成(Create)
続いて、データの作成(追加)です。データを新たに追加する場合、だいたい各項目の値を入力するフォームを用意し、それを送信して処理を行う、といった形になるでしょう。ここでは「フォームの表示アクション」「送信されたフォームを処理するアクション」の2つのアクションの組み合わせで処理を作成してみましょう。
下に簡単な例をあげておきました。ここでは、newとcreateという2つのアクションを用意しています。ただし、Viewテンプレートはnew.html.erbのみです。createはサーバー内で処理をするだけで、処理後にすぐindexにリダイレクトしてしまうのでViewは不要です。
また、Railsではフォームを作成する場合、専用のヘルパーを利用するのが一般的なのですが、まだヘルパー関係について説明をしていないので、今回は普通にHTMLのタグを書いて用意してあります。これでも問題なく使えますが、「Railsではあまりこういうやり方はしない」ということだけ頭に入れておいてください。
さて、ここではnewについては特に何も処理はしていません。肝心なのはcreateメソッドです。ここで、前回作成したHeloモデルのインスタンスを作成しています。以下の部分です。
newで作成されたオブジェクトを「save」で保存すれば、オブジェクトはデータベースのテーブルにレコードとして保存されます。フォームのヘルパーなどを利用すれば更に簡単になりますが、まずはこの基本とも言えるやり方を覚えておけばデータの新規作成には十分でしょう。
見ればわかるように、データベースやテーブルを操作する処理は一切ありません。ただRubyのオブジェクトとしてModelを作成し、保存するだけです。Modelを利用することで、データベースの利用が格段に簡単になっていることが実感できますね。
ちなみに、最後にリダイレクトをするのに「redirect_to obj」というのを実行していますね。「redirect_to」というので、リダイレクトを行うことができます。これは単純にアドレスを指定すればそこに移動しますし、このようにModelインスタンスを指定すればそのModelのindexにリダイレクトされます。あるいは、
下に簡単な例をあげておきました。ここでは、newとcreateという2つのアクションを用意しています。ただし、Viewテンプレートはnew.html.erbのみです。createはサーバー内で処理をするだけで、処理後にすぐindexにリダイレクトしてしまうのでViewは不要です。
また、Railsではフォームを作成する場合、専用のヘルパーを利用するのが一般的なのですが、まだヘルパー関係について説明をしていないので、今回は普通にHTMLのタグを書いて用意してあります。これでも問題なく使えますが、「Railsではあまりこういうやり方はしない」ということだけ頭に入れておいてください。
さて、ここではnewについては特に何も処理はしていません。肝心なのはcreateメソッドです。ここで、前回作成したHeloモデルのインスタンスを作成しています。以下の部分です。
obj = Helo.new(:title => title,:content => content)まずクラスの「new」メソッドを呼び出してインスタンスを作成し、それぞれのプロパティにフォームから送信された値を代入します。これは、保管するオプションにそれぞれの値を「:○○ => '△△'」というようにまとめて記述します。複数の項目があるなら、それぞれをカンマで区切って記述します。
obj.save
newで作成されたオブジェクトを「save」で保存すれば、オブジェクトはデータベースのテーブルにレコードとして保存されます。フォームのヘルパーなどを利用すれば更に簡単になりますが、まずはこの基本とも言えるやり方を覚えておけばデータの新規作成には十分でしょう。
見ればわかるように、データベースやテーブルを操作する処理は一切ありません。ただRubyのオブジェクトとしてModelを作成し、保存するだけです。Modelを利用することで、データベースの利用が格段に簡単になっていることが実感できますね。
ちなみに、最後にリダイレクトをするのに「redirect_to obj」というのを実行していますね。「redirect_to」というので、リダイレクトを行うことができます。これは単純にアドレスを指定すればそこに移動しますし、このようにModelインスタンスを指定すればそのModelのindexにリダイレクトされます。あるいは、
redirect_to obj :controller => コントローラー名, :action => 'アクション名'こんな具合にControllerとアクションを指定することで、そのアクションにリダイレクトすることもできます。この使い方は覚えておくとよいでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※new.html.erbのソースコード <p><%= @msg %></p> <hr> <form method="post" action="create"> <table> <tr> <td>title:</td> <td><input type="text" id="title" name="title" size="40"></td> </tr> <tr> <td>content:</td> <td><textarea id="content" name="content" cols="40" rows="3"></textarea></td> </tr> <tr> <td></td> <td><input type="submit"></td> </tr> </table> </form> ※new/createアクションメソッド def new @title = "サンプルレイアウト" @header_content = "データの追加" @msg = "データの追加を行います。" end def create title = params['title'] content = params['content'] obj = Helo.new(:title => title,:content => content) obj.save redirect_to obj end
※関連コンテンツ