Viewヘルパーを使ったCRUD作成 (1/4)
作成:2012-02-27 07:55
更新:2012-02-27 07:55
更新:2012-02-27 07:55
■Viewヘルパーを使ったフォームの作成
前回、CRUDの基本的な機能をひと通り作成しましたが、どうも面倒臭いな……と思う部分が何箇所かあったことでしょう。routes.rbの記述もそうですが、一番大きいのは「フォーム」の記述です。
例えば、新しいデータを追加するnewアクションのページを考えてみましょう。ここではデータを送信するフォームを用意しますが、どうもこれがスマートではありません。いちいちフォームのタグを全部手書きして送信し、受け取ったアクション側で1つ1つの値を取り出してModelインスタンスを作る……。なんか、とてもベタで、あまり便利そうにも見えませんね。
実をいえば、Railsにはもっと便利にフォームを作成するための機能がちゃんと備わっているのです。それは「View(ビュー)ヘルパー」と呼ばれるものです。Viewヘルパーというのは、文字通りViewの作成をHelpするためのものです。この機能を利用することで、Viewをよりすっきりと作成することができます。
では、さっそく前回作成したHelo追加のためのアクション(new/create)を修正してみることにしましょう。下のリスト欄に、修正したnew.html.erbを掲載しておきました。また、HelosControllerのnew/createアクションのメソッドもあわせて修正しておきましょう。
ここでは、フォームの生成は以下のような形で行なっています。
では、フォームから送信されたものはどのように処理されるのでしょうか。createアクションのメソッドを見ていると、以下のようにしてModelインスタンスを作成・保存していることがわかります。
例えば、新しいデータを追加するnewアクションのページを考えてみましょう。ここではデータを送信するフォームを用意しますが、どうもこれがスマートではありません。いちいちフォームのタグを全部手書きして送信し、受け取ったアクション側で1つ1つの値を取り出してModelインスタンスを作る……。なんか、とてもベタで、あまり便利そうにも見えませんね。
実をいえば、Railsにはもっと便利にフォームを作成するための機能がちゃんと備わっているのです。それは「View(ビュー)ヘルパー」と呼ばれるものです。Viewヘルパーというのは、文字通りViewの作成をHelpするためのものです。この機能を利用することで、Viewをよりすっきりと作成することができます。
では、さっそく前回作成したHelo追加のためのアクション(new/create)を修正してみることにしましょう。下のリスト欄に、修正したnew.html.erbを掲載しておきました。また、HelosControllerのnew/createアクションのメソッドもあわせて修正しておきましょう。
■ビューヘルパーの内容
ここでは、フォームの生成は以下のような形で行なっています。
<%= form_for(@helo) do |f| %>この「form_for」というのが、Viewヘルパーの機能です。これは、引数に指定したオブジェクト(ここでは@helo)をもとにフォームの生成を行うことができます。ここはオブジェクトは変数fに代入されています。そしてこのfのプロパティをもとに、以下のようにしてコントロール関係のタグが生成されます。
……コントロール関係の記述……
<% end %>
<%= f.label :title %><br />これはtitleのタグを生成している部分ですね。このようにして、<label>タグと<input type="text">タグのコードが出力されます。labelメソッドとtext_fieldを呼び出すだけなのがわかります。――こうして入力する項目を用意したら、最後に送信ボタンをつけます。これでフォームは完成です。
<%= f.text_field :title %>
<%= f.submit %>
■アクション側の処理
では、フォームから送信されたものはどのように処理されるのでしょうか。createアクションのメソッドを見ていると、以下のようにしてModelインスタンスを作成・保存していることがわかります。
obj = Helo.new(params[:helo])params[:helo]という形で、送信されたフォームの情報をまるごとnewの引数に指定するだけです。個別に保存するデータの項目と値を用意する必要はありません。Viewヘルパーを使ってフォームを作ると、このように非常に単純にModelを作れます。
obj.save
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※new.html.erb <p><%= @msg %></p> <hr> <%= form_for(@helo) do |f| %> <div class="field"> <%= f.label :title %><br /> <%= f.text_field :title %> </div> <div class="field"> <%= f.label :content %><br /> <%= f.text_field :content %> </div> <div class="actions"> <%= f.submit %> </div> <% end %> ※new/createアクションの修正 def new @title = "サンプルレイアウト" @header_content = "データの追加" @msg = "データの追加を行います。" @helo = Helo.new end def create obj = Helo.new(params[:helo]) obj.save redirect_to obj end
※関連コンテンツ