验证belongs_to、has_many关系中字段的唯一性

问题描述 投票:0回答:2

我有两个 Rails Active Record 模型组和帐户

group

    has_many :accounts

    id 
    name
    .. other infromation
    timestamps


Account

    belongs_to :group

    id
    name
    .. other information
    timestamps

我需要在帐户部分中执行验证 :name, :uniqueness => true ,但仅在组下进行。就像我希望帐户名在组下是唯一的一样。我知道我可以强制执行数据库唯一约束,但是我可以使用 AR 来执行此操作吗?有可能吗?

ruby-on-rails ruby-on-rails-3 activerecord
2个回答
9
投票

试试这个:

validates :name, uniqueness: true, scope: :group_id

有关可用于验证的选项的更多信息,请查看 ActiveRecord 验证文档


0
投票

我不确定接受的答案是否有效,但截至今天(2022年2月22日和rails 5/6/7)它不起作用。正如许多人在评论中已经建议的那样,正确的方法是:

validates :name, presence: true, uniqueness: { scope: :group_id }
© www.soinside.com 2019 - 2024. All rights reserved.