libro
www.tuyano.com
初心者のためのRuby on Rails3入門

Modelによるデータベースアクセスの基本 (2/4)

作成:2012-02-13 07:46
更新:2012-02-16 15:36

■データの作成(Create)

続いて、データの作成(追加)です。データを新たに追加する場合、だいたい各項目の値を入力するフォームを用意し、それを送信して処理を行う、といった形になるでしょう。ここでは「フォームの表示アクション」「送信されたフォームを処理するアクション」の2つのアクションの組み合わせで処理を作成してみましょう。

下に簡単な例をあげておきました。ここでは、newcreateという2つのアクションを用意しています。ただし、Viewテンプレートはnew.html.erbのみです。createはサーバー内で処理をするだけで、処理後にすぐindexにリダイレクトしてしまうのでViewは不要です。

また、Railsではフォームを作成する場合、専用のヘルパーを利用するのが一般的なのですが、まだヘルパー関係について説明をしていないので、今回は普通にHTMLのタグを書いて用意してあります。これでも問題なく使えますが、「Railsではあまりこういうやり方はしない」ということだけ頭に入れておいてください。

さて、ここではnewについては特に何も処理はしていません。肝心なのはcreateメソッドです。ここで、前回作成したHeloモデルのインスタンスを作成しています。以下の部分です。
    obj = Helo.new(:title => title,:content => content)
    obj.save
まずクラスの「new」メソッドを呼び出してインスタンスを作成し、それぞれのプロパティにフォームから送信された値を代入します。これは、保管するオプションにそれぞれの値を「:○○ => '△△'」というようにまとめて記述します。複数の項目があるなら、それぞれをカンマで区切って記述します。

newで作成されたオブジェクトを「save」で保存すれば、オブジェクトはデータベースのテーブルにレコードとして保存されます。フォームのヘルパーなどを利用すれば更に簡単になりますが、まずはこの基本とも言えるやり方を覚えておけばデータの新規作成には十分でしょう。

見ればわかるように、データベースやテーブルを操作する処理は一切ありません。ただRubyのオブジェクトとしてModelを作成し、保存するだけです。Modelを利用することで、データベースの利用が格段に簡単になっていることが実感できますね。

ちなみに、最後にリダイレクトをするのに「redirect_to obj」というのを実行していますね。「redirect_to」というので、リダイレクトを行うことができます。これは単純にアドレスを指定すればそこに移動しますし、このようにModelインスタンスを指定すればそのModelindexにリダイレクトされます。あるいは、
redirect_to obj :controller => コントローラー名, :action => 'アクション名'
こんな具合にControllerとアクションを指定することで、そのアクションにリダイレクトすることもできます。この使い方は覚えておくとよいでしょう。

※プログラムリストが表示されない場合

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

※関連コンテンツ

「初心者のためのRuby on Rails3入門」に戻る