0

如果特定记录未通过 validates_uniqueness 约束,我想加载它。

我的模型中有 id(主键)和标题。如果用户输入一个已经存在的标题,如果想要搜索具有该标题的记录并加载该记录而不是抛出错误。

有没有办法做到这一点?

4

1 回答 1

0

您可以使用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
于 2011-09-20T13:24:06.523 回答