プログラミング

【slim】form_forで初期値を指定したセレクトボックスを書く

更新日:

はじめまして。今回はプログラミングについての備忘録を一つ書きたいと思います。主にWebプログラミングに関連することですが、今回はその中でも、slimについてのメモです。みなさんの参考になれば幸いです。

まずslimとは何か?


おそらくこの記事を読んでいる人は、ウェブ系のブログラミングをやっている人、興味がある人だと思います。ウェブページを作る際は、最近は学校でも習うこともあるhtmlとcss、またjavascriptなんかを使うと思いますが、slimとはこのhtmlの部分を楽に書ける(フレームワーク?みたいな)ものだと思って貰えばいいと思います。具体的にどんな風に楽なのかというと、例えば、以下のようなhtmlでのプログラムはslimでは次のように書き換えることができます。

html

<html>
  <head>
  </head>
  <body>
    
<h1>アフィリモ</h1>

    
<div class="contain">アフィリモはあなたのアフィリエイト活動を完全無料で支援します。</div>

  </body>
</html>

slim

html
    head
    body
        h1 アフィリモ
        .contain
            |アフィリモはあなたのアフィリエイト活動を完全無料で支援します。

見てもらうとわかりますが、通常のhtmlと異なり、閉じタグが不要なことが大きな特徴です。また、要素の親子関係をインデントで表現しているため、非常に見やすいプログラムになっています。要素に加えるclassやidも.や#をつけるだけで簡単に書くことができるため、作業効率が格段に上がります。slimは単体で使うことはできませんが、gulpなどを用いてコンパイルしたり、railsなどのフレームワークならgemを使ったりすることで利用が可能になります。

form_tagとform_forの違いは?

さて、私はrailsでslimを利用しているのですが、railsでslimを使ってフォームを作成する際は2種類の書き方があります。それが、form_forを使ったものと、form_tagを使うものです。前者は、主にすでに存在するモデルの値を更新したい場合などに用いられ、modelに基づいたフォームを作る時は非常に有効です。反対に、form_tagはモデルが存在しない値を扱う場合などに非常に有効で、データベースには存在しないけれどフォームになんらかの情報を入力させて取得、処理をしたい場合によく使います。
htmlでform_tagを用いた場合のselectボックスの例を以下に示します。モデルに基づいてフォームを生成していることがわかるかと思います。例では、Categoryというモデルをあらかじめ生成してあるので、Category.allを指定することで簡単にoption要素を設定できます。

<% formtag(:controller => article, :action => create) %>
  <%= f.collectionselect :category, Category.all, :id, :categoryname, includeblank: true %>
  <%= submit_tag "作成" %>
<% end %>

本題へ。form_forでのセレクトボックスの書き方

さて本題です。slimの場合で、form_forを使った場合はセレクトボックスはどう書けばいいのでしょうか?いろいろ調べてみましたが、上記に示したような書き方以外で、デフォルトの選択を指定する方法について、あまりリファレンスがなかったのでメモしておこうと思います。
結論から言いますと、slimでform_forでセレクトボックスを作成したい場合は以下のように書きます。

slimでのformforメソッドのセレクトボックス

= formfor [@user], :url =&gt; user<em>update</em>path do |f|
    = f.label :like, "あなたの好きな食べ物は?"
    = f.select :like, options<em>for</em>select( なし: {:selected =&gt; "0"},りんご: "1", みかん: "2", ばなな: "3"), {prompt: t('食べ物選択')}

上の例では、好きな食べ物を選択させるセレクトボックスのフォームを作成できます。あらかじめ初期選択の要素を指定しておくには、selectedをもちいるといいようです。form_forの中に、インデントでf.selectと書くことで実現できます。

まとめ

今回は、railsでslimを利用したフォーム(form_for)の作成方法の中でも、初期値を選択した状態でのセレクトボックスの書き方をまとめてみました。みなさんのコーディングがはかどるといいなと思います。ありがとうございました。

-プログラミング
-, , , , , , , , , , , , , , ,

Copyright© アフィリモ -AffiLimo- 総合情報局 , 2019 All Rights Reserved Powered by AFFINGER5.