如果validates_唯一性约束失败,我想加载特定的记录。
我的模型中有id(主键)和title。如果用户输入一个已经存在的标题,如果想要搜索带有该标题的记录并加载该记录,而不是抛出错误。
有办法吗?
您可以使用before_validation
回调自己检查有效性,当它失败时,触发您正在寻找的行为。因此,一种方法是在before_validation
中编写代码,在那里您可以做一个简单的.valid?
调用,或者手动运行唯一性验证。当验证失败时,您可以停止回调链,并触发自定义行为。
before_validation
是可供您使用的众多ActiveRecord回调函数之一。
另一种更常见的方法是,在你的控制器中,你可以将.save
调用包装在if语句中,因为如果验证失败,.save
将返回false
。在你描述的情况下,你可以用它来重定向到另一个操作。
@new_record = ThingImSaving.new(params[:thing_im_saving]
if @new_record.save
...validation has passed, continue the normal path
else
...validation has failed, do something else.
end