gpt4 book ai didi

ruby-on-rails - Rails 验证 : Scoped Uniqueness on a Boolean

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

基于 this previous question that I asked ,我知道不可能在 bool 字段上使用标准范围的唯一性。对于 bool 值,您必须使用包含验证,但我无法弄清楚如何将包含范围限定到表中的另一个字段。

这是我能想到的最简单的描述方式。

我有 app_settingsapp_setting_options 表。 app_settings 采用给定的 app_option_optionuser_iduser_role_idgroup_idevent_id,或 app_level。它们都具有范围唯一性验证,因此只能有一个记录具有特定的 user_id 和特定的 app_setting_option。问题是 app_level 字段是一个 bool 值,我不知道如何将该唯一性(真或假)限定为 app_setting_option

这是我现在的验证:

validates :app_setting_option_id, presence: true
validates :user_id, uniqueness: { scope: :app_setting_option_id}, allow_nil: true
validates :user_role_id, uniqueness: { scope: :app_setting_option_id}, allow_nil: true
validates :group_id, uniqueness: { scope: :app_setting_option_id}, allow_nil: true
validates :event_id, uniqueness: { scope: :app_setting_option_id}, allow_nil: true
validates :app_level_setting, inclusion: { in: [true, false] }, allow_nil: true

最后一个范围的唯一性语法是什么?

最佳答案

我可能误解了这个问题,但是如果你想在 app_level_settingtrue 时允许一个具有给定 user_idapp_setting ,和一个app_setting,当app_level_settingfalse时,给定user_id,你可以使用一个数组到 scope,例如 scope: [:app_setting_option_id, :app_level_setting]

如果您希望 app_level_setting 具有与其他范围类似的作用域,您可能必须手动执行此操作,例如使用 validate :app_level_setting_scope 并创建方法 app_level_setting_scope 如果记录不唯一则添加错误。您必须自己执行查询和逻辑。

Rails guides有一些关于如何执行此操作的文档。

关于ruby-on-rails - Rails 验证 : Scoped Uniqueness on a Boolean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30898009/

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