Copying validation errors from one attribute to another
When using virtual attributes, the attached trait can be useful to automatically copy errors from one attribute to another.
Here is a typical use case where Paperclip creates a virtual attribute :attachment
, but there are validations on both :attachment
and :attachment_file_name
. If the form has a file picker on :attachment
, you would like to highlight it with errors from any attribute:
Copyclass Note < ActiveRecord::Base has_attached_file :attachment validates_attachment_presence :attachment validates_format_of :attachment_file_name, :with => /^\d+\.jpg$/ include DoesCopyErrors[from: :attachment_file_name, to: :attachment] end
If you'd like to remove the errors from the source attribute once they are copied to the target attribute, you can use the :move
option:
Copyinclude DoesCopyErors[from: :attachment_file_name, to: :attachment, move: true]
By refactoring problematic code and creating automated tests, makandra can vastly improve the maintainability of your Rails application.