P.S:我一直在使用Ruby不到48小时,所以期待我是愚蠢的!验证消息帮助程序或检索验证错误
我已经建立了验证模型,所有工作正常。不过,我想修改由唯一性约束返回的消息。该消息需要通过执行一些额外处理的方法返回。
因此,例如,如果我尝试创建“名称”属性设置为“bob”,并且bob命名帐户已存在的新用户模型,我想显示一条消息,如“Bob不可用,点击这里查看当前鲍勃的账户“。
因此,辅助方法将查找当前的bob帐户,获取本地化的字符串,并执行本地化字符串的常见字符串放置,将名称,链接到帐户以及我想要的任何其他信息放入邮件中。
从本质上讲,我想是这样的:
validates_uniqueness_of :text, :message => self.uniquefound()
def uniquefound()
return "some string i can make up myself with #{self.name}'s info in it"
end
毫无疑问,这是完全错误的......
如果这是不可能的,我已经找到了我可以使用users.errors.added?
如果name属性检测有一个独特的错误添加,从那里我可以做一些散列操作来删除唯一的错误,并把我自己在那里要么在“after_validation”回调或在控制器...还没有制定出如何做那是,但这是我的后备计划。
那么,有没有为消息提供类方法回调的方法,或者将当前模型传递给该方法(如果它是一个静态方法),或者在该方法内调用它以使该方法成为待验证的模型。
更新
通过轨道源代码拖网,我发现增加错误的错误类
private
def normalize_message(attribute, message, options)
case message
when Symbol
generate_message(attribute, message, options.except(*CALLBACKS_OPTIONS))
when Proc
message.call
else
message
end
end
end
所以在这个被称为私有方法,如果我传递的方法作为消息,我认为这个方法是用来调用我的函数/方法并获取返回数据。然而,它似乎没有在当前对象的范围内调用,也没有通过错误所属的对象...
所以,如果我的挖掘是在正确的路径上,似乎调用一个方法对消息的当前对象,或者调用传递对象的静态方法是不可能的。
是的,我没看可能性做我自己独特的验证,然后让我做wh atever我喜欢这个消息。猜猜我希望有更像回调的东西。目前试图查看是否可以在消息中找到':taken'消息,并在'after_validation'期间替换它,但由于消息散列只是readbale,我必须使用类提供的任何方法。这可能意味着抓取属性的整个错误数组,找到并删除与“:taken”相匹配的值,然后插入一个新值 – Lee
好吧,它具有相同的确切效果,但我为Proc对象添加了一个方法,适合你的需求以及更接近你原来的问题 – engineersmnky
哈我想它确实有同样的效果,因为它仍然需要查询原始帐户。但奇怪的是,对于消息来说,使用回调函数更合适,因为那是我想要修改的,而不是完全自己处理唯一的约束(而不是它结束了任何不同,所以也许我只是愚蠢)。无论如何,感谢您的帮助!猜猜我会开始搜索并找出两个参数指定的位置,因为我无法在rails源中找到任何指示,其中属性传递给回调函数。 – Lee