我有一系列错误如下:
n.errors.full_messages
# => ["Password can't be blank", "Password can't be blank", "Password is too short (minimum is 3 characters)"]
我想迭代这个数组的独特元素并在屏幕上显示它们。
验证模型
class Member < ActiveRecord::Base
has_one :profile
before_save { self.username = username.downcase }
has_secure_password
validates :password, presence: true, length: { minimum: 3 }
end
n.errors.full_messages.uniq do |a|
puts a
end
uniq
无效,"Password can't be blank"
在我的数组中出现两次。有什么想法吗?
Password can't be blank
Password can't be blank
Password is too short (minimum is 3 characters)
# => ["Password can't be blank"]
答案 0 :(得分:4)
编辑:这实际上并没有回答这个问题,如果谷歌把你带到这里,请使用@BroiSatse的答案。
您收到该消息两次的原因是has_secure_password
:
第一个项目符号点似乎添加了需要密码的验证。
在您的模型中,您还要添加
validates :password, presence: true, length: { minimum: 3 }
presence: true
部分增加了相同的验证。删除它所以:
validates :password, length: { minimum: 3 }
这应解决问题。
答案 1 :(得分:3)
uniqe
使用块的值来比较元素。你想要的是:
n.errors.full_messages.uniq.each do |m|
无论如何,我认为你是从错误的角度解决问题 - 你的问题不是如何避免显示重复的消息,而是如何重复这种情况。
答案 2 :(得分:0)
你可以做一个字符串比较。
让阵列对您有问题。翻过来,将元素逐个保存到新数组中。
现在,当第一个添加到新阵列时,请检查阵列中的所有元素是否与要添加的新元素不匹配。例如:"My string".eql? "My sting"
在Ruby中可能有更聪明的方法。但是,当手动使用其他语言时,这就是想法。