我想在验证失败导致的错误消息中显示一些额外信息。例如,假设我有一个具有以下验证的类 Book
validates :name, presence: true, uniqueness: true
当有人尝试插入同名书籍时,将返回以下错误消息
{"name":["has already been taken"]}
相反,我想展示
{"name":["Book 'Great Expectaions' has already been taken at id:7"]}
现在要做到这一点,我必须删除我上面提到的唯一性验证并执行以下操作
validate do |book|
existing_book = Book.find_by_name(book.name)
if existing_book
book.errors.add(:name, "#{existing_book.name} already exists at id: #{existing_book.id}")
end
end
有没有办法在不编写自定义唯一性验证的情况下获取上述自定义错误消息?我在想一些事情
validates :name, presence: true, uniqueness: {message: "#{self.name} already exists at id: #{Book.find_by_name(self.name).id}"
但这似乎不起作用,因为 self.name 返回“书”。有没有办法在这种情况下访问传递的参数?