Search code examples
activeadminformtastic

Make semantic_errors render the exact error-message


I have a model Camping which has_many Images. At least one image is required on Camping:

class Camping < ActiveRecord::Base
  attr_accessible :images_attributes
  has_many :images
  validates_presence_of :images, :message => "At least one image is required"
  accepts_nested_attributes_for :images, :allow_destroy => true
 end

Then, in active_admin, which uses formtastic, I render the error message At least one image is required, with f.semantic_errors:

ActiveAdmin.register Camping do
  form :html => { :multipart => true } do |f|
     f.semantic_errors :images
     #....
     f.inputs "Images" do
      f.has_many :images do |img|
        #....
      end
    end
    #....
  end
end

This renders as:

Example output of error

Images At least one image is required.

How can I make it render: At least one image is required?

changing the f.semantic_errors :images into 'f.semantic_errors (removing :images) makes it render nothing; no error at all.

Note: The API documentation seems to imply that Formtastic always adds the :attribute name to the error; but I am not entirely sure how this code works.


Solution

  • If you want to use such custom messages you can add error messages that are related to the object’s state as a whole, instead of being related to a specific attribute

    Change this

    validates_presence_of :images, :message => "At least one image is required"
    

    to something like

       validate :should_have_images
       def should_have_images
           errors.add(:base, "At least one image is required") if images.blank?
       end