【发布时间】:2021-02-20 06:03:54
【问题描述】:
我有一个数据库,其中电子邮件被设置为具有状态的唯一验证。我已将范围设置为 int 'status',当特定帐户处于活动状态时为 1。 因此,如果用户切换他的国家,他的帐户状态将切换为 0,并使用相同的电子邮件创建一个新帐户,并将状态设置为 1。 所以为了解决这个问题,我在“电子邮件”和“状态”上使用了一个复合唯一键,
validates :email, uniqueness: { scope: :status }
所以,让我们进行一次小试运行。 目前,用户在 X 国家,他的电子邮件是 abc@xyz.com 所以数据库可能看起来像
email: abc@xyz.com
status: 1
现在如果他去 Y 国 数据库更新为,
[for company X]
email: abc@xyz.com
status: 0
[for company Y]
email:abc@xyz.com
status: 1
工作正常 但是现在如果我们的旅行者现在去 Z 国 数据库将像现在一样卡住,因为公司 Y 状态将更新为 0,并且现在这种组合不是唯一的,因此将返回错误。 这里也是一项具有挑战性的任务,仅使用电子邮件和状态作为键。 我想要实现的是,对于特定的电子邮件 status:1 必须是唯一的,而 status:0 可以是任意次数。 所以我试图将语句设置为
validates :email, uniqueness: { scope: :status }, if: :status == 1
但没有运气,因为我无法在模型中获取特定用户的状态值。 提前致谢!! PS:我是ROR的新手,所以请提供相关链接,以便我了解更多xD。
【问题讨论】:
标签: ruby-on-rails postgresql ruby-on-rails-5