gpt4 book ai didi

mongoid - 基于嵌入属性验证 Mongoid 中的嵌入文档

转载 作者:行者123 更新时间:2023-12-02 04:07:52 26 4
gpt4 key购买 nike

我有一个订阅者类,它有 embeds_many 订阅。订阅具有属性状态。我想添加对状态的验证,以便每个订阅者只有一个订阅可以具有“事件”状态。订户可以拥有多个状态为“已购买”或“已过期”的订阅。

最佳答案

这应该可以做到:

class Subscriber
include Mongoid::Document
embeds_many :subscriptions
validate :active_subscriptions

def active_subscriptions
self.errors.add(:base, 'too many active subscriptions') if
subscriptions.where(status: 'active').count > 1
end
end

class Subscription
include Mongoid::Document
embedded_in :subscriber
field :status, class: 'String'
end

s = Subscriber.create
s.subscriptions.build(status: 'active')
s.save # fires validations on subscriber
s.subscriptions.build(status: 'active')
s.save # wouldn't save

但请确保您始终对订阅者调用 save,否则验证不会对订阅者触发,并且您将处于不一致的状态。在不一致的状态下,您稍后可能会看到验证失败

s = Subscriber.create
s.subscriptions.create(status: 'active') # fires validations on subscription only
s.subscriptions.build(status: 'active').save # fires validations on subscription only

如果您还需要验证订阅,则在保存订阅者时,您可以级联回调:

embeds_many :subscriptions, cascade_callbacks: true

关于mongoid - 基于嵌入属性验证 Mongoid 中的嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12985358/

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