how to customize rails activerecord validation error message to show attribute value

后端 未结 3 917
甜味超标
甜味超标 2020-12-08 20:08

When a user tries to create a record with a name that already exists, I want to show an error message like:

name \"some name\" has already been taken

3条回答
  •  半阙折子戏
    2020-12-08 20:27

    It looks like you can pass a Proc to the message. When you do this, you get two parameters:

    1. A symbol along the lines of :activerecord.errors.models.user.attributes.name.taken
    2. A hash that looks something like `{:model=>"User", :attribute=>"Name", :value=>"My Name"}

    So if you allow for two parameters on a proc, you can use the attributes[:value] item to get the name that was used:

    validates_uniqueness_of :name, 
                            :message => Proc.new { |error, attributes| 
                              "#{attributes[:value]} has already been taken." 
                            }
    

提交回复
热议问题