2012-07-27

RailsAdmin + Dragonfly + html5_validatorsでアップロード済みのファイルを認識しない

症状

RailsAdmin も html5_validators も高度すぎて全然ついていけませんが、こいつらがとても気が利いていてすごいということは分かってきました。

が、今日はちょっと困ったことの報告。それは

  • Rails 3.2.6 + RailsAdmin 0.0.5 + Dragonfly 0.9.12 + html5_validators 1.1.0 の組み合わせ
  • 画像が必須の Model を定義
  • データを編集するときにアップロード済みのファイルの存在を html5_validators が認識できずに怒られる

というものです。

怒られる部分の DOM の状態は以下のような感じ。

Model モデルの image という attribute に dragonfly の attachment を定義しています。

<div id="model_image_field"
     class="control-group dragonfly_type image_field ">
<label for="model_image" class="control-label">画像ファイル</label>
<div class="controls">
  <div class="toggle">
   <a target="blank" class="thumbnail"
      href="/media/BAhbBlsHOgZmIiAyMDEyLzA3LzMwLzEwXzQ5... ">
     <img src="/media/BAhbB1sHOgZmIiAyMDEyLzA3LzMwLzEwXzQ5... "
          alt="Bahbb1shogzmiiaymdeylza3lzmwlzewxzq5... ">
   </a>
   <input type="file"
          required="required"
          name="model[image]" id="model_image"
          data-fileupload="true">
  </div>
  <input type="hidden"
         name="model[retained_image]" id="model_retained_image">
  <p class="help-block">必須. </p>
</div>
</div>

ここで <input id="model_image" type="file" required="required"> に対して validationMessage が「ファイルを選択してください。」になっている状態です。

validity を見ると valueMissing が true です。

しかしこれって HTML を load して DOM パネル開いた段階でもう validation 終了してるんですね。すげー。

回避方法

とりあえず画像必須の Model で

 self.auto_html5_validation = false

で html5_validators を外しています。

About

例によって個人のなんちゃらです