Bootstrap の file field おめかし

デザイン無能なのでBootstrap便利に使わせて貰ってます。
社内シスしか作らないからオワコンとか関係無い。

form作ってて、file field だけが違和感。
f:id:yossk:20151011091718j:plain

デザイン無能でも、これはいけてないのはわかる。
ググると、bootstrap-fileinput がまずひっかかった。
Bootstrap File Input - © Kartik
何か色々できすぎるみたい。ちょっと見た目変えたい程度なのに、オーバースペックかな、と。

で、選んだのはこれ。
Bootstrap Filestyle 1.2.1 - jQuery Customization of input html file for Bootstrap Twitter
ダウンロードして、lib/assets/javascripts に js ファイルを入れ、application.js に require 追加。

フォームサンプル

= form_for @user, html: { class: "form-horizontal" } do |f|
  .form-group
    = f.label :name, class: 'col-sm-3 control-label'
    .col-sm-5
      = f.text_field :name, class: 'form-control'
  .form-group
    = f.label :email, class: 'col-sm-3 control-label'
    .col-sm-5
      = f.text_field :email, class: 'form-control'
  .form-group
    = f.label :avatar, class: 'col-sm-3 control-label'
    .col-sm-8
      = f.file_field :avatar, class: 'filestyle', "data-buttonText": "ファイル選択"

  .form-group
    .col-sm-offset-3.col-sm-3
      = f.submit class: 'btn btn-primary'

f:id:yossk:20151011093242j:plain

class に filestyle を指定して、表示文字列を変えたければ data-buttonText で。
簡単ね。

関係無いけど、Ruby で "文字列": 値 ってかけるの知らなかった。key は Symbol になる。

% pry
[1] pry(main)> h = { "hoge": :a }
=> {:hoge=>:a}
[2] pry(main)> h[:hoge]
=> :a
[3] pry(main)> h["hoge"]
=> nil