【发布时间】:2011-09-20 13:03:48
【问题描述】:
如果特定记录未通过 validates_uniqueness 约束,我想加载它。
我的模型中有 id(主键)和标题。如果用户输入一个已经存在的标题,如果想要搜索带有该标题的记录并加载该记录而不是抛出错误。
有办法吗?
【问题讨论】:
标签: ruby-on-rails ruby validates-uniqueness-of
如果特定记录未通过 validates_uniqueness 约束,我想加载它。
我的模型中有 id(主键)和标题。如果用户输入一个已经存在的标题,如果想要搜索带有该标题的记录并加载该记录而不是抛出错误。
有办法吗?
【问题讨论】:
标签: ruby-on-rails ruby validates-uniqueness-of
您可以使用before_validation 回调自己检查有效性,并在失败时触发您正在寻找的行为。因此,一种方法是在before_validation 中编写代码,然后您可以在其中进行简单的.valid? 调用,或者自行手动运行唯一性验证。当验证失败时,您可以停止回调链,并触发自定义行为。
before_validation 是您可以使用的众多ActiveRecord callbacks 之一。
另一种更常见的方法是,在您的控制器中,您基本上可以将 .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
【讨论】: