Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

remove field name from object validation message

I've got a simple active record validation on an object using this within a form:

  form.error_messages({:message => '', :header_message => ''})

This in turn outputs something like "FieldName My Custom message"

What i need to do is remove the field name from the error message but leave my custom message.

Can anyone point me in the right direction for this.

like image 233
pythonandchips Avatar asked Jun 01 '10 16:06

pythonandchips


3 Answers

In rails 3.2.6, you can set this in a locale file (e.g., config/locales/en.yml):

en:
  errors:
    format: "%{message}"

Otherwise, the default format is "%{attribute} %{message}".

like image 198
KenB Avatar answered Nov 10 '22 03:11

KenB


One way to have complete control over the messages is to use a custom validate block in the model. e.g. to check that a field is not blank it would be like this:

class MyModel < ActiveRecord::Base
  validate do |model|
    model.errors.add_to_base("My Custom message") if user.field.blank?
  end
end

add_to_base is intended for adding messages that aren't related to a particular individual field (e.g. if a combination of multiple fields is illegal). This means that the CSS to highlight your invalid field won't get added. You can work arround this by also adding a nil message to the errors for your field e.g.

model.errors.add(:field, nil)

Alternatively, check out custom-err-message plugin - this plugin gives you the option to not have your custom validation error message prefixed with the attribute name.

Update:

add_to_base is deprecated since Rails 3. The following can be used instead: model_instance.errors.add(:base, "Msg")
Ref: https://apidock.com/rails/ActiveRecord/Errors/add_to_base

like image 39
mikej Avatar answered Nov 10 '22 05:11

mikej


You can use errors.add_to_base http://api.rubyonrails.org/classes/ActiveRecord/Errors.html#M001712

like image 38
shingara Avatar answered Nov 10 '22 03:11

shingara