読者です 読者をやめる 読者になる 読者になる

Ruby on RailsにおけるView その2

こんばんは、south37です。
今日が自分の担当だという事に3:00頃布団に入った瞬間に気づき、慌ててPCを立ち上げるもネット回線が繋がらず、コンビニに滞納した料金を支払いにいくもすぐには回線が復旧してくれなくて、半ば諦めていたところつい先程ネットに繋がるようになり安堵している午前4:00です。
毎回railsについてばっか書いててそろそろネタの替え時かとは思うのですが、ちょっと今日は余裕無い感じなので前回の続きで行きます!

railsのviewにおけるメソッドいろいろ

はい、タイトルの通りviewです。前回はslimを紹介してクールだねって言ったと思うのですが、railsで用意しているメソッドもクールだよって伝えていければなと思います。まずは、「form_for」です。

<% @comment = Comment.new %>
<%= form_for @comment do |f| %>
  <div class="field">
    <%= f.label 'comment:' %>
    <%= f.text_field :message %>
  </div>
  <div class="submit">
    <%= f.submit 'コメントを書き込み' %>
  </div>
<% end %>

何をしているか、何となく分かるでしょうか?これは、railsでscaffoldすると買ってに生成される_form.html.twigという部分テンプレートの中身です。部分テンプレートが何かは、後で説明します。
で、form_forというのは名前の通りformを生成するメソッドです。formの生成はタグを作りまくる必要があるので面倒なんですが、railsではそれをクールにまとめてくれます。form_forにmodelオブジェクトを渡すと、そのオブジェクトの生成の為のformとなります。すなわち、form_forメソッドにブロックとして渡したtext_fieldに入力された文字列を使って、submit後にはcommentsテーブルにinsertしてくれます。デフォルトでいろいろやってくれるのがrailsです。

ちなみに、上の例では@commentをviewの中で生成しちゃってますが、デフォルトではcontrollerの中で生成します。実は上記の例は部分テンプレートと言った通り別のviewの内部で読み込まれているviewで、そのcontrollerにわざわざ@comment生成を書くのも変かと思ってviewに書いちゃってます。どっちが正しいかはよくわかんないです。

ここで出た部分テンプレートというのは、テンプレートを部品化して使い回す機能です。例えば、上記の_form.html.twigは、

<%= render 'comments/form' %>

のようなコードで簡単に好きな場所に埋め込む事が出来ます。この際、movies viewから読み込んでいるため'comments/form'と記述していますが、commentのviewからであれば、<%= render 'form' %>でokです。railsの信条として、「けっして同じコードを何度も書かせない」というのがあります。コピペをした瞬間に、何かが間違っている事になります。この辺の主義や、その主義を通す為の環境が整えられているのが、railsのクールなところですね。

なんか全然書いてない気もしますが、今日はこのへんで勘弁してください。。。
次から流石に話題を変えようと思います!やっぱjsとかですかね!