如果特定记录未通过 validates_uniqueness 约束,我想加载它。
我的模型中有 id(主键)和标题。如果用户输入一个已经存在的标题,如果想要搜索具有该标题的记录并加载该记录而不是抛出错误。
有没有办法做到这一点?
如果特定记录未通过 validates_uniqueness 约束,我想加载它。
我的模型中有 id(主键)和标题。如果用户输入一个已经存在的标题,如果想要搜索具有该标题的记录并加载该记录而不是抛出错误。
有没有办法做到这一点?
您可以使用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