gpt4 book ai didi

ruby-on-rails - rails 中的 has_one 关系验证

转载 作者:行者123 更新时间:2023-12-04 05:44:10 25 4
gpt4 key购买 nike

has_one不提供 before_add回调以允许验证,
我如何防止 rails 破坏旧的关联,即使
新的没有通过验证?

苏珊:has_one:衬衫
衬衫 :belongs_to :susan

susan.shirt = a_nice_shirt

这破坏了之前存在的任何关联,
即使新衬衫从来没有真正关联过,因为它没有通过
验证,留下一个赤膊上阵的苏珊(嗯,实际上留下了一件衬衫
后面不属于任何人..)。

susan.build_shirt

做同样的事情

失踪有什么好的理由 before_add我忽略的回调?

最佳答案

我不确定为什么没有那个回调,但你总是可以向模型添加一个观察者,并在 before_save 中验证新的关联。我假设“susan”是一个用户模型实例,衬衫必须是红色才能通过验证。

class UserObserver< ActiveRecord::Observer
def before_save(user)
return false if user.shirt.color != "red"
end
end

如果在观察者中返回 false,则对象将不会保存。当然,您当前的“susan”实例仍将具有无效关联。我不是很肯定,但是如果您将观察者中的 before_save_ 更改为如下所示:
class UserObserver< ActiveRecord::Observer
def before_save(user)
if user.shirt.color != "red"
user.reload
false
end
end

可能会刷新您的用户实例。不过我从来没有试过这个。

关于ruby-on-rails - rails 中的 has_one 关系验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1208119/

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