3
我有一個擁有embeds_many訂閱的訂閱者類。訂閱有一個屬性狀態。我想添加狀態驗證,以便每個訂閱者只有一個訂閱可以具有「活動」狀態。訂戶可以有多個訂閱狀態爲「已購買」或「過期」。根據嵌入屬性在Mongoid中驗證嵌入文檔
我有一個擁有embeds_many訂閱的訂閱者類。訂閱有一個屬性狀態。我想添加狀態驗證,以便每個訂閱者只有一個訂閱可以具有「活動」狀態。訂戶可以有多個訂閱狀態爲「已購買」或「過期」。根據嵌入屬性在Mongoid中驗證嵌入文檔
這應做到:
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
但要確保你總是叫節省用戶,否則驗證將不會觸發對用戶,你會處於不一致的國有土地。在不一致的狀態,你可能會看到失敗驗證後
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
那麼,什麼是你的問題呢? – Nippey