gpt4 book ai didi

ruby-on-rails - 在 Rails 中,是否可以修复模型内部的模型验证错误?

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:10 25 4
gpt4 key购买 nike

假设模型捕获了验证错误,通常这由 Controller 处理,但是否有可能由模型自动处理?

实际上我想为每个Note生成一个唯一的id uid,模型看起来像这样:

class Note < ActiveRecord::Base
validates_uniqueness_of :uid
# ... some code to generate uid on after_initialize
end

我得到的最接近的是:

class Note < ActiveRecord::Base
validates_uniqueness_of :uid
# ... some code to generate uid on after_initialize

after_rollback :repair

protected

def repair
if self.errors[:uid].size > 0
self.uid = generate_uid
end
self.save # Try again
end
end

我的解决方案存在一些直接问题:(1) 模型实例仍然存在 Controller 可以看到的错误,我不确定如何清除这些错误。 (2)修复方法是递归的。

最佳答案

虽然我确信有一种方法可以捕获和处理模型中的错误(也许 after_validation 回调可能有用),但也许您可以通过确保您生成的 uid 在创建时是唯一的。

Ryan Bates offered this method for generating unique tokens in a RailsCast :

def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end

使用 before_create 回调,即 before_create { generate_token(:uid) },每个模型都会有一个唯一的 ID。

综上所述,@Beerlington 提出了一个关于 UUID 的非常好的观点。

更新:请注意,给定的方法预计会在User 模型中定义。对于您的示例,您希望将其更改为 ...while Note.exists?...

关于ruby-on-rails - 在 Rails 中,是否可以修复模型内部的模型验证错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12570262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com