Ruby
RubyOnRails
activeadmin

activeadminのフォームでbaseエラーを表示する

activeadmin便利ですよね。
ただ、ちょっとなにか特別なことをしようとすると困ることが多々あります :sweat_smile:

今回、モデルに以下のような独自バリデーションを入れたとき、エラー時にフォームでエラー表示がされず困ったのでメモ。

app/models/article.rb
class Article < ApplicationRecord
  validate :custom_validate

  def custom_validate
    if condition
      errors.add(:base, 'XXXなのでダメです。')
    end
  end
end
app/admin/article.rb
ActiveAdmin.register Article do

  ...

  form do |f|
    f.inputs do
      f.input :title
      f.input :text
    end
    f.actions
  end
  # => このままだと:baseエラーが表示されない...
end

結論

semantic_errorsを使えばOK :ok_hand:

ActiveAdmin.register Article do

  ...

  form do |f|
    f.semantic_errors
    f.inputs do
      f.input :title
      f.input :text
    end
    f.actions
  end
end

以上です。

参考