2

無効なファイル タイプをアップロードしようとすると、モデルの添付フィールドの検証エラーがビューに表示されないという問題があります。私のモデルは次のように設定されています:

has_attached_file :avatar,
  styles: {medium: "300x300>", thumb: "100x100>"}

validates_attachment :avatar, presence: true,
  content_type: { content_type: /^image\/(jpg|jpeg|pjpeg|png|x-png|gif)$/ },
  size: { in: 0..10.megabytes }

デバッガーでエラーを調べると、次のように表示されます。

(rdb:1) p @applicant.errors.to_hash
{:avatar_content_type=>["is invalid"]}

検証が機能していることはわかっているので、エラーが「avatar」フィールドではなく「avatar_content_type」フィールドにあることが問題であると思われます。simple_form ディスカッション フォーラムで同様の問題を見つけました。提案の 1 つは、エラー ヘルパーを使用することです。

<%= f.input :avatar %>
<%= f.error :avatar_content_type %>

この種の動作はしますが、通常のエラーに含まれるマークアップとクラスが含まれておらず、適切にスタイル設定されていません。Twitterのブートストラップで機能する、私が見落としているアプローチはありますか?

4

1 に答える 1

2

Uber のハック、これをフォームの上のビューに配置します。

<% @applicant.errors[:avatar] << "Invalid avatar upload format" if @applicant.errors[:avatar_content_type] %>

編集:より良い答え:

コントローラーで同じことをする

def update
  @applicant = Applicant.find(params[:id])
  if @applicant.update_attributes(params[:applicant])
    # ..
  else
    @applicant.errors[:avatar] << "Invalid avatar upload format" if @applicant.errors[:avatar_content_type]
    render :edit
  end
end
于 2013-02-22T15:39:01.807 に答える