# app/models/apple.rb
before_validation :save_validation_context
around_create :lock_tree
def save_validation_context
@saved_validation_context = validation_context
end
def lock_tree
tree.with_lock do
validate!(@saved_validation_context)
yield
end
end
3条答案
按热度按时间6vl6ewon1#
正如@rowend所指出的,
validation_context
(现在)在某些回调中可用,包括before_validation
,但不是大多数后来的回调。如果稍后需要上下文,则可以将其保存为早期回调中的示例变量。如果要在创建新对象期间锁定关联对象,则可以使用此选项。例如,一棵树只能容纳100个苹果,所以每次创建苹果时都要锁定该树,这样就不会意外地将两个苹果同时添加到已经容纳99个苹果的树中:
这适用于Rails版本6.1.7.2和Ruby版本3.1.3。
vuktfyat2#
也许现在去派对有点晚了。
我可以在回调函数
before_validation
中使用方法validation_context
,它包含了上下文。Rails版本:6.1.3
Ruby版本:2.7.2
jecbmhm33#
您可以编写自己的方法来执行与您想要使用的验证相同的操作。